| 
									
										
										
										
											2024-03-07 10:10:54 -06:00
										 |  |  | package formatters | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"bufio" | 
					
						
							|  |  |  | 	"bytes" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"codeberg.org/danjones000/my-log/models" | 
					
						
							|  |  |  | 	"codeberg.org/danjones000/my-log/tools" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-10 11:31:07 -05:00
										 |  |  | func TestPlainLogs(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2024-03-07 10:10:54 -06:00
										 |  |  | 	m := []models.Meta{ | 
					
						
							|  |  |  | 		{"foo", "bar"}, | 
					
						
							|  |  |  | 		{"baz", 42}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	e := []models.Entry{ | 
					
						
							|  |  |  | 		{Title: "one", Date: time.Now(), Fields: m}, | 
					
						
							|  |  |  | 		{Title: "small", Date: time.Now()}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	l := models.Log{"stuff", e} | 
					
						
							| 
									
										
										
										
											2024-03-10 11:31:07 -05:00
										 |  |  | 	e2 := models.Entry{ | 
					
						
							|  |  |  | 		Title: "three", | 
					
						
							|  |  |  | 		Date:  time.Now(), | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	l2 := models.Log{"more-stuff", []models.Entry{e2}} | 
					
						
							|  |  |  | 	logs := []models.Log{l, l2} | 
					
						
							| 
									
										
										
										
											2024-03-07 10:10:54 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	f, err := New("plain") | 
					
						
							|  |  |  | 	require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-10 11:31:07 -05:00
										 |  |  | 	out, err := f.Logs(logs) | 
					
						
							| 
									
										
										
										
											2024-03-07 10:10:54 -06:00
										 |  |  | 	require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	read := bytes.NewReader(out) | 
					
						
							|  |  |  | 	scan := bufio.NewScanner(read) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line := scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, l.Name, line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "#######", line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "Title: "+e[0].Title, line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "Date: "+e[0].Date.Format(tools.DateFormat), line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "foo: bar", line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "baz: 42", line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "Title: "+e[1].Title, line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "Date: "+e[1].Date.Format(tools.DateFormat), line) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-10 11:31:07 -05:00
										 |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, l2.Name, line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "#######", line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "Title: "+e2.Title, line) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	scan.Scan() | 
					
						
							|  |  |  | 	line = scan.Text() | 
					
						
							|  |  |  | 	assert.Equal(t, "Date: "+e2.Date.Format(tools.DateFormat), line) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-07 10:10:54 -06:00
										 |  |  | 	more := scan.Scan() | 
					
						
							|  |  |  | 	assert.False(t, more) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestPlainName(t *testing.T) { | 
					
						
							|  |  |  | 	f, _ := New("plain") | 
					
						
							|  |  |  | 	assert.Equal(t, "plain", f.Name()) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-10 11:31:07 -05:00
										 |  |  | func TestPlainLogNone(t *testing.T) { | 
					
						
							|  |  |  | 	f, _ := New("plain") | 
					
						
							|  |  |  | 	out, err := f.Logs([]models.Log{}) | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Len(t, out, 0) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-07 10:10:54 -06:00
										 |  |  | func TestPlainLogNoEntries(t *testing.T) { | 
					
						
							|  |  |  | 	f, _ := New("plain") | 
					
						
							|  |  |  | 	out, err := f.Log(models.Log{Name: "foo"}) | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Len(t, out, 0) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestPlainMetaEmpty(t *testing.T) { | 
					
						
							|  |  |  | 	f, _ := New("plain") | 
					
						
							|  |  |  | 	out, err := f.Meta(models.Meta{"foo", ""}) | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Len(t, out, 0) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestPlainMetaError(t *testing.T) { | 
					
						
							|  |  |  | 	f, _ := New("plain") | 
					
						
							|  |  |  | 	out, err := f.Meta(models.Meta{"foo", make(chan bool)}) | 
					
						
							|  |  |  | 	assert.Error(t, err) | 
					
						
							|  |  |  | 	assert.Len(t, out, 0) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestPlainEntry(t *testing.T) { | 
					
						
							|  |  |  | 	f, _ := New("plain") | 
					
						
							|  |  |  | 	now := time.Now() | 
					
						
							|  |  |  | 	out, err := f.Entry(models.Entry{ | 
					
						
							|  |  |  | 		Title: "foo", | 
					
						
							|  |  |  | 		Date:  now, | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, fmt.Sprintf("Title: foo\nDate: %s", now.Format(tools.DateFormat)), string(out)) | 
					
						
							|  |  |  | } |