timetracker/internal/cli/cli_test.go

86 lines
1.8 KiB
Go
Raw Permalink Normal View History

2024-03-25 08:31:39 +01:00
package cli
import (
"bytes"
"log"
"os"
"strings"
"testing"
"time"
)
func TestRunNotComplete(t *testing.T) {
// Test if there is no log message if modification date is current
var logContent bytes.Buffer
log.SetOutput(&logContent)
directory, _ := createStatusFile()
2025-03-19 20:51:09 +01:00
archiveData := false
2024-03-25 08:31:39 +01:00
2025-03-19 20:51:09 +01:00
Run(&directory, &archiveData)
2024-03-25 08:31:39 +01:00
if logContent.String() != "" {
log.Fatalf("Expected empty logmessage")
}
}
func TestRunComplete(t *testing.T) {
// Test if there are log messages if modification date is in the past
var logContent bytes.Buffer
log.SetOutput(&logContent)
directory, fileName := createStatusFile()
2025-03-19 20:51:09 +01:00
archiveData := false
2024-03-25 08:31:39 +01:00
setModificationDate(fileName, "28.02.2022")
2025-03-19 20:51:09 +01:00
Run(&directory, &archiveData)
2024-03-25 08:31:39 +01:00
if logContent.String() == "" {
log.Fatalf("Expected logmessage")
}
if !strings.Contains(logContent.String(), "Work duration: 0.25h") {
log.Fatalf("Expected duration in logmessage")
}
if !strings.Contains(logContent.String(), "Start: 07:45:00, End: 08:00:00") {
log.Fatalf("Expected start and end date in logmessage")
}
}
func setModificationDate(fileName string, dateString string) {
// Set modification time to past
timestamp, _ := time.Parse(dateLayout, dateString)
err3 := os.Chtimes(fileName, timestamp, timestamp)
if err3 != nil {
log.Fatal(err3)
}
}
func createStatusFile() (string, string) {
// Create a temporary directory
directory, err := os.MkdirTemp("", "unittest")
if err != nil {
log.Fatal(err)
}
defer os.Remove(directory)
fileName := directory + "/status"
// Create a test status file
file, err2 := os.Create(fileName)
if err2 != nil {
log.Fatal(err2)
}
defer file.Close()
// Add test content to status file
file.WriteString("2022-03-01T07:45:00+01:00\n")
file.WriteString("2022-03-01T08:00:00+01:00\n")
return directory, fileName
}