From 212034e8e7dcbbf41feaf7410ea2f60ee55b577a Mon Sep 17 00:00:00 2001
From: Jack Robertson <jack.robertson@nexusmods.com>
Date: Wed, 12 Jul 2023 11:54:23 +0100
Subject: [PATCH] test: add NewLoggerWithLeveler test

---
 logger_test.go | 42 +++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 41 insertions(+), 1 deletion(-)

diff --git a/logger_test.go b/logger_test.go
index adde38d..b453de4 100644
--- a/logger_test.go
+++ b/logger_test.go
@@ -17,7 +17,7 @@ type log struct {
 	Source  slog.Source `json:"source"`
 }
 
-func TestNew(t *testing.T) {
+func TestNewLogger(t *testing.T) {
 	// Arrange
 	var buf bytes.Buffer
 
@@ -70,3 +70,43 @@ func TestNew(t *testing.T) {
 	assert.False(t, scanner.Scan())
 	assert.NoError(t, scanner.Err())
 }
+
+func TestNewLoggerWithLeveler(t *testing.T) {
+	// Arrange
+	var buf bytes.Buffer
+
+	programLevel := new(slog.LevelVar)
+	programLevel.Set(slog.LevelError)
+
+	logger := NewLogger(WithWriter(&buf), WithLeveler(programLevel))
+
+	// Act
+	logger.Warn("Never gonna give", slog.String("you", "up"))
+	programLevel.Set(slog.LevelWarn)
+	logger.Warn("Never gonna let", slog.String("you", "down"))
+
+	// Assert
+	scanner := bufio.NewScanner(&buf)
+
+	// Scan the first log
+	assert.True(t, scanner.Scan())
+	var (
+		rawWarnLog = scanner.Bytes()
+		warnLog    = struct {
+			log
+			You string `json:"you"`
+		}{}
+	)
+	if err := json.Unmarshal(rawWarnLog, &warnLog); err != nil {
+		t.Errorf("Failed to unmarshal warn log: %s", err)
+	}
+
+	assert.Equal(t, "warn", warnLog.Status)
+	assert.Equal(t, "Never gonna let", warnLog.Message)
+	assert.Equal(t, "down", warnLog.You)
+	assert.WithinDuration(t, time.Now(), warnLog.Date, 1*time.Second)
+
+	// Assert that there are no more logs
+	assert.False(t, scanner.Scan())
+	assert.NoError(t, scanner.Err())
+}
-- 
GitLab