package learsteam_quiz_test import ( "learnsteam/cslms-api/internal/controllers" "learnsteam/cslms-api/internal/models" "learnsteam/cslms-api/internal/repositories" "learnsteam/cslms-api/internal/services" "os" "testing" "github.com/stretchr/testify/suite" "gorm.io/gorm" ) type QuizTestSuite struct { suite.Suite db *gorm.DB repository repositories.QuizRepository service services.QuizService controller controllers.QuizController } // func (suite *QuizTestSuite) SetupSuite() { // // err := os.Remove("test.db") // // if err != nil { // // suite.Fail("Failed to remove the test database file") // // } // gorm_config := gorm.Config{NamingStrategy: schema.NamingStrategy{SingularTable: true}} // db, _ := gorm.Open(sqlite.Open("test.db"), &gorm_config) // db.AutoMigrate(&models.Quiz{}) // repository := repositories.NewQuizRepository(db) // service := services.NewQuizService(repository) // controller := controllers.NewQuizController(service) // suite.db = db // suite.service = service // suite.repository = repository // suite.controller = controller // // suite.CreateSampleData() // } // func (suite *QuizTestSuite) CreateSampleData() { // var quizzes []models.Quiz // quiz_paper_id := "1_id" // c := []string{"1", "2", "3", "4"} // var j datatypes.JSON // j, _ = json.Marshal(c) // for i := 1; i < 6; i++ { // q := models.Quiz{ // ID: strconv.Itoa(i), // QuizPaperID: quiz_paper_id, // No: i, // QuestionType: "multiple", // Question: strconv.Itoa(i) + " question", // Content: j, // Answer: j, // Hint: "힌트입니다.", // Comment: "설명입니다.", // UpdatedAt: time.Now(), // CreatedAt: time.Now(), // } // quizzes = append(quizzes, q) // } // for _, quiz := range quizzes { // suite.db.Create(&quiz) // } // } func (suite *QuizTestSuite) TearDownSuite() { // DB 삭제 suite.db.Migrator().DropTable(&models.Quiz{}) err := os.Remove("test.db") if err != nil { suite.Fail("Failed to remove the test database file") } } func (suite *QuizTestSuite) SetupTest() { // suite.CreateSampleData() } func (suite *QuizTestSuite) TearDownTest() { } func TestQuizSuite(t *testing.T) { suite.Run(t, new(QuizTestSuite)) } // // 목록 테스트 // func (suite *QuizTestSuite) TestListQuizSuccess() { // quizzes, err := suite.repository.List("id_1", 1, 10) // assert.NoError(suite.T(), err) // assert.NotNil(suite.T(), quizzes) // assert.Equal(suite.T(), 5, len(*quizzes)) // } // // Find 테스트 // func (suite *QuizTestSuite) TestFindQuizSuccess() { // quiz, err := suite.repository.Find("1") // assert.NoError(suite.T(), err) // assert.Equal(suite.T(), "1", quiz.ID) // } // // Find 테스트 // func (suite *QuizTestSuite) TestFindQuizFail() { // _, err := suite.repository.Find("x") // assert.Error(suite.T(), err) // } // // 수정 테스트 // func (suite *QuizTestSuite) TestUpdateQuizFail() { // c := []string{"1", "2", "3", "4"} // var j datatypes.JSON // j, _ = json.Marshal(c) // q := &models.Quiz{ // ID: uuid.NewString(), // QuizPaperID: uuid.NewString(), // No: 1, // QuestionType: "multiple", // Question: "question", // Content: j, // Answer: j, // Hint: "힌트입니다.", // Comment: "설명입니다.", // UpdatedAt: time.Now(), // CreatedAt: time.Now(), // } // quiz, err := suite.repository.Create(q) // assert.NoError(suite.T(), err) // quiz.QuestionType = "check" // quiz.Content = j // quiz.Answer = j // quiz.Hint = "힌트입니다!" // updatedQuiz, err := suite.repository.Update(quiz) // assert.NoError(suite.T(), err) // assert.Equal(suite.T(), updatedQuiz.QuestionType, quiz.QuestionType) // assert.Equal(suite.T(), updatedQuiz.Content, quiz.Content) // assert.Equal(suite.T(), updatedQuiz.Answer, quiz.Answer) // } // // 삭제 테스트 // func (suite *QuizTestSuite) TestDeleteQuizSuccess() { // c := []string{"1", "2", "3", "4"} // var j datatypes.JSON // j, _ = json.Marshal(c) // q := &models.Quiz{ // ID: uuid.NewString(), // QuizPaperID: uuid.NewString(), // No: 1, // QuestionType: "multiple", // Question: "question", // Content: j, // Answer: j, // Hint: "힌트입니다.", // Comment: "설명입니다.", // UpdatedAt: time.Now(), // CreatedAt: time.Now(), // } // _, err := suite.repository.Create(q) // assert.NoError(suite.T(), err) // err = suite.repository.Delete(q.ID) // assert.NoError(suite.T(), err) // _, err = suite.repository.Find(q.ID) // assert.Error(suite.T(), err) // }