mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-07-16 17:48:49 +02:00
109 lines
4.0 KiB
Go
109 lines
4.0 KiB
Go
package course
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"github.com/stretchr/testify/require"
|
|
"htwkalender/data-manager/model"
|
|
"htwkalender/data-manager/model/serviceModel"
|
|
"htwkalender/data-manager/service/events/mock"
|
|
"htwkalender/data-manager/service/functions/time"
|
|
"log/slog"
|
|
"regexp"
|
|
"testing"
|
|
)
|
|
|
|
// CustomWriter is a custom writer to capture log output
|
|
type CustomWriter struct {
|
|
Buffer bytes.Buffer
|
|
}
|
|
|
|
func (w *CustomWriter) Write(p []byte) (n int, err error) {
|
|
return w.Buffer.Write(p)
|
|
}
|
|
|
|
func TestUpdateCourse(t *testing.T) {
|
|
// Create mock services
|
|
mockCourseService := new(mock.MockCourseService)
|
|
mockEventService := new(mock.MockEventService)
|
|
|
|
// Set the current time to 2024-07-01T00:00:00Z
|
|
// This will result in the current semester being "ss"
|
|
parseTime, _ := time.ParseTime("2024-07-01T00:00:00Z")
|
|
mockClock := time.MockClock{NowTime: parseTime}
|
|
|
|
events := model.Events{}
|
|
|
|
// Set up expectations
|
|
mockCourseService.On("GetAllCoursesForSemester", "ss").Return([]model.SeminarGroup{{Course: "Course1", Semester: ""}, {Course: "Course2", Semester: ""}})
|
|
mockEventService.On("UpdateModulesForCourse", model.SeminarGroup{Course: "Course1", Semester: ""}).Return(events, nil)
|
|
mockEventService.On("UpdateModulesForCourse", model.SeminarGroup{Course: "Course2", Semester: ""}).Return(events, nil)
|
|
|
|
// Inject mocks into the UpdateCourse function
|
|
service := serviceModel.Service{
|
|
CourseService: mockCourseService,
|
|
EventService: mockEventService,
|
|
App: nil,
|
|
}
|
|
UpdateCourse(service, mockClock)
|
|
|
|
// Assert that the expectations were met
|
|
mockCourseService.AssertExpectations(t)
|
|
mockEventService.AssertExpectations(t)
|
|
|
|
// Assert that the UpdateCourse function was called twice
|
|
mockCourseService.AssertNumberOfCalls(t, "GetAllCoursesForSemester", 1)
|
|
mockEventService.AssertNumberOfCalls(t, "UpdateModulesForCourse", 2)
|
|
|
|
// Assert that the UpdateCourse function was called with the correct arguments
|
|
mockEventService.AssertCalled(t, "UpdateModulesForCourse", model.SeminarGroup{Course: "Course1", Semester: ""})
|
|
mockEventService.AssertCalled(t, "UpdateModulesForCourse", model.SeminarGroup{Course: "Course2", Semester: ""})
|
|
}
|
|
|
|
func TestUpdateCourseErr(t *testing.T) {
|
|
// Create mock services
|
|
mockCourseService := new(mock.MockCourseService)
|
|
mockEventService := new(mock.MockEventService)
|
|
|
|
events := model.Events{}
|
|
|
|
// Set the current time to 2024-07-01T00:00:00Z
|
|
// This will result in the current semester being "ss"
|
|
parseTime, _ := time.ParseTime("2024-07-01T00:00:00Z")
|
|
mockClock := time.MockClock{NowTime: parseTime}
|
|
|
|
// Set up expectations
|
|
mockCourseService.On("GetAllCoursesForSemester", "ss").Return([]model.SeminarGroup{{Course: "Course1", Semester: ""}, {Course: "Course2", Semester: ""}})
|
|
mockEventService.On("UpdateModulesForCourse", model.SeminarGroup{Course: "Course1", Semester: ""}).Return(events, fmt.Errorf("error"))
|
|
mockEventService.On("UpdateModulesForCourse", model.SeminarGroup{Course: "Course2", Semester: ""}).Return(events, fmt.Errorf("error"))
|
|
|
|
// Create a custom writer to capture log output
|
|
customWriter := &CustomWriter{}
|
|
originalLogger := slog.Default()
|
|
defer slog.SetDefault(originalLogger)
|
|
|
|
// Replace the default logger with a custom logger
|
|
slog.SetDefault(slog.New(slog.NewTextHandler(customWriter, nil)))
|
|
|
|
// Inject mocks into the UpdateCourse function
|
|
service := serviceModel.Service{
|
|
CourseService: mockCourseService,
|
|
EventService: mockEventService,
|
|
App: nil,
|
|
}
|
|
UpdateCourse(service, mockClock)
|
|
|
|
// Assert that the expectations were met
|
|
mockCourseService.AssertExpectations(t)
|
|
mockEventService.AssertExpectations(t)
|
|
|
|
// Assert that the UpdateCourse function was called twice
|
|
mockCourseService.AssertNumberOfCalls(t, "GetAllCoursesForSemester", 1)
|
|
mockEventService.AssertNumberOfCalls(t, "UpdateModulesForCourse", 2)
|
|
|
|
// Check the captured log output for the expected messages
|
|
logOutput := customWriter.Buffer.String()
|
|
require.Regexp(t, regexp.MustCompile(`Update Course: Course1 failed:.*error`), logOutput)
|
|
require.Regexp(t, regexp.MustCompile(`Update Course: Course2 failed:.*error`), logOutput)
|
|
}
|