cslms-api/test/quiz_test.go
2023-12-29 00:27:12 +09:00

176 lines
4.6 KiB
Go

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)
// }