package fleprocess import ( "fmt" "testing" ) func Test_validateDataforAdif2(t *testing.T) { type args struct { loadedLogFile []LogLine adifParams AdifParams } tests := []struct { name string args args want error }{ { "Happy Case (no sota, pota or wwff)", args{ adifParams: AdifParams{IsWWFF: false, IsSOTA: false, IsPOTA: false}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "time", Call: "call"}, }, }, nil, }, { "No data", args{ adifParams: AdifParams{IsWWFF: false, IsSOTA: false, IsPOTA: false}, loadedLogFile: []LogLine{}, }, fmt.Errorf("no QSO found"), }, { "Missing Date", args{ adifParams: AdifParams{IsWWFF: false, IsSOTA: false, IsPOTA: false}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:01", Call: "call"}, {Date: "", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:02", Call: "call"}, {Date: "", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:03", Call: "call"}, }, }, fmt.Errorf("missing date for log entry at 12:02 (#2), missing date for log entry at 12:03 (#3)"), }, { "Missing MyCall", args{ adifParams: AdifParams{IsWWFF: true, IsSOTA: true, IsPOTA: true}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:01", Call: "call"}, {Date: "date", MyCall: "", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:02", Call: "call"}, {Date: "date", MyCall: "", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:03", Call: "call"}, }, }, fmt.Errorf("missing MyCall"), }, { "Missing MyCall (POTA)", args{ adifParams: AdifParams{IsWWFF: false, IsSOTA: false, IsPOTA: true}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:01", Call: "call"}, {Date: "date", MyCall: "", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:02", Call: "call"}, {Date: "date", MyCall: "", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:03", Call: "call"}, }, }, fmt.Errorf("missing MyCall"), }, { "Missing MySota", args{ adifParams: AdifParams{IsWWFF: false, IsSOTA: true, IsPOTA: false}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, }, }, fmt.Errorf("missing MY-SOTA reference"), }, { "Missing MyPota", args{ adifParams: AdifParams{IsWWFF: false, IsSOTA: false, IsPOTA: true}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, }, }, fmt.Errorf("missing MY-POTA reference"), }, { "Misc. missing data (Band, Time, Mode, Call)", args{ adifParams: AdifParams{IsWWFF: false, IsSOTA: false, IsPOTA: false}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "", Time: "", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "", Band: "band", Time: "12:02", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "mySota", Mode: "mode", Band: "band", Time: "12:03", Call: ""}, }, }, fmt.Errorf("missing band for log entry #1, missing QSO time for log entry #1, missing mode for log entry at 12:02 (#2), missing call for log entry at 12:03 (#3)"), }, { "Missing MY-WWFF", args{ adifParams: AdifParams{IsWWFF: true, IsSOTA: false, IsPOTA: false}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "myCall", MySOTA: "mySota", MyWWFF: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "mySota", MyWWFF: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MySOTA: "mySota", MyWWFF: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, }, }, fmt.Errorf("missing MY-WWFF reference"), }, { "Missing Operator with isWWFF", args{ adifParams: AdifParams{IsWWFF: true, IsSOTA: false, IsPOTA: false}, loadedLogFile: []LogLine{ {Date: "date", MyCall: "myCall", MyWWFF: "myWwff", Operator: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MyWWFF: "myWwff", Operator: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, {Date: "date", MyCall: "myCall", MyWWFF: "myWwff", Operator: "", Mode: "mode", Band: "band", Time: "time", Call: "call"}, }, }, fmt.Errorf("missing Operator call sign"), }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got := validateDataforAdif(tt.args.loadedLogFile, tt.args.adifParams) //Test the error message, if any if got != nil && tt.want != nil { if got.Error() != tt.want.Error() { t.Errorf("validateDataforAdif() = %v, want %v", got, tt.want) } } else { if !(got == nil && tt.want == nil) { t.Errorf("validateDataforAdif() = %v, want %v", got, tt.want) } } }) } } func TestProcessAdifCommand(t *testing.T) { type args struct { adifParams AdifParams } tests := []struct { name string args args wantErr bool }{ { "Bad output filename (directory)", args{ adifParams: AdifParams{ InputFilename: "../test/data/fle-4-no-qso.txt", OutputFilename: "../test/data", IsInterpolateTime: false, IsOverwrite: false, }, }, true, }, { "input file parsing errors (missing band)", args{ adifParams: AdifParams{ InputFilename: "../test/data/fle-3-error.txt", OutputFilename: "", IsInterpolateTime: false, IsOverwrite: false, }, }, true, }, { "input file parsing errors (wrong call)", args{ adifParams: AdifParams{ InputFilename: "../test/data/fle-5-wrong-call.txt", OutputFilename: "", IsInterpolateTime: false, IsOverwrite: false, }, }, true, }, { "No QSO in loaded file", args{ adifParams: AdifParams{ InputFilename: "../test/data/fle-4-no-qso.txt", OutputFilename: "", IsInterpolateTime: false, IsOverwrite: false, }, }, true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if err := ProcessAdifCommand(tt.args.adifParams); (err != nil) != tt.wantErr { t.Errorf("ProcessAdifCommand() error = %v, wantErr %v", err, tt.wantErr) } }) } }