Swag Docs
This commit is contained in:
		
							
								
								
									
										190
									
								
								test/program_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								test/program_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,190 @@
 | 
			
		||||
package learsteam_quiz_test
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"learnsteam/learsteam-quiz-api/internal/controllers"
 | 
			
		||||
	"learnsteam/learsteam-quiz-api/internal/models"
 | 
			
		||||
	"learnsteam/learsteam-quiz-api/internal/repositories"
 | 
			
		||||
	"learnsteam/learsteam-quiz-api/internal/services"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/uuid"
 | 
			
		||||
	"github.com/stretchr/testify/suite"
 | 
			
		||||
	"github.com/tj/assert"
 | 
			
		||||
	"gorm.io/datatypes"
 | 
			
		||||
	"gorm.io/driver/sqlite"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
	"gorm.io/gorm/schema"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ProgramTestSuite struct {
 | 
			
		||||
	suite.Suite
 | 
			
		||||
	db         *gorm.DB
 | 
			
		||||
	repository repositories.ProgramRepository
 | 
			
		||||
	service    services.ProgramService
 | 
			
		||||
	controller controllers.ProgramController
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *ProgramTestSuite) 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.Program{})
 | 
			
		||||
 | 
			
		||||
	repository := repositories.NewProgramRepository(db)
 | 
			
		||||
	service := services.NewProgramService(repository)
 | 
			
		||||
	controller := controllers.NewProgramController(service)
 | 
			
		||||
 | 
			
		||||
	suite.db = db
 | 
			
		||||
	suite.service = service
 | 
			
		||||
	suite.repository = repository
 | 
			
		||||
	suite.controller = controller
 | 
			
		||||
 | 
			
		||||
	suite.CreateSampleData()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *ProgramTestSuite) CreateSampleData() {
 | 
			
		||||
	var programs []models.Program
 | 
			
		||||
	for i := 1; i < 101; i++ {
 | 
			
		||||
		t := []string{"tag" + strconv.Itoa(i), "taga", "tagb"}
 | 
			
		||||
		var j datatypes.JSON
 | 
			
		||||
		j, _ = json.Marshal(t)
 | 
			
		||||
		p := models.Program{
 | 
			
		||||
			ID:        strconv.Itoa(i) + "_id",
 | 
			
		||||
			Subject:   strconv.Itoa(i) + " subject",
 | 
			
		||||
			Content:   strconv.Itoa(i) + " content",
 | 
			
		||||
			Tag:       j,
 | 
			
		||||
			Tags:      j.String(),
 | 
			
		||||
			Status:    "on",
 | 
			
		||||
			PublishAt: time.Now(),
 | 
			
		||||
			UpdatedAt: time.Now(),
 | 
			
		||||
			CreatedAt: time.Now(),
 | 
			
		||||
		}
 | 
			
		||||
		programs = append(programs, p)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, program := range programs {
 | 
			
		||||
		suite.db.Create(&program)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *ProgramTestSuite) TearDownSuite() {
 | 
			
		||||
	// DB 삭제
 | 
			
		||||
	suite.db.Migrator().DropTable(&models.Program{})
 | 
			
		||||
	err := os.Remove("test.db")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		suite.Fail("Failed to remove the test database file")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *ProgramTestSuite) SetupTest() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (suite *ProgramTestSuite) TearDownTest() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestProgramSuite(t *testing.T) {
 | 
			
		||||
	suite.Run(t, new(ProgramTestSuite))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 목록 테스트 : 1page, 10개
 | 
			
		||||
func (suite *ProgramTestSuite) TestListProgramSuccess() {
 | 
			
		||||
	programs, err := suite.repository.List("", "", 1, 10)
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
	assert.NotNil(suite.T(), programs)
 | 
			
		||||
	assert.Equal(suite.T(), 10, len(*programs))
 | 
			
		||||
	program0 := (*programs)[0]
 | 
			
		||||
	assert.Equal(suite.T(), "100_id", program0.ID)
 | 
			
		||||
 | 
			
		||||
	program9 := (*programs)[9]
 | 
			
		||||
	assert.Equal(suite.T(), "91_id", program9.ID)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 목록 테스트 : tag 검색
 | 
			
		||||
func (suite *ProgramTestSuite) TestListProgramTagSearchSuccess() {
 | 
			
		||||
	programs, err := suite.repository.List("", "tag9", 1, 10)
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
	assert.NotNil(suite.T(), programs)
 | 
			
		||||
	assert.Equal(suite.T(), 10, len(*programs))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Total 테스트
 | 
			
		||||
func (suite *ProgramTestSuite) TestTotalSuccess() {
 | 
			
		||||
	total, err := suite.repository.Total("", "")
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
	assert.Equal(suite.T(), int64(100), total)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Total 테스트 : tag 검색
 | 
			
		||||
func (suite *ProgramTestSuite) TestTotalTagSuccess() {
 | 
			
		||||
	total, err := suite.repository.Total("", "tag2")
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
	assert.Equal(suite.T(), int64(11), total)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 수정 테스트
 | 
			
		||||
func (suite *ProgramTestSuite) TestUpdateProgramSuccess() {
 | 
			
		||||
	t := []string{"TAG"}
 | 
			
		||||
	var j datatypes.JSON
 | 
			
		||||
	j, _ = json.Marshal(t)
 | 
			
		||||
	p := &models.Program{
 | 
			
		||||
		ID:        uuid.NewString(),
 | 
			
		||||
		Subject:   "My Subject",
 | 
			
		||||
		Content:   "My Content",
 | 
			
		||||
		Tag:       j,
 | 
			
		||||
		Tags:      j.String(),
 | 
			
		||||
		Status:    "on",
 | 
			
		||||
		PublishAt: time.Now(),
 | 
			
		||||
		UpdatedAt: time.Now(),
 | 
			
		||||
		CreatedAt: time.Now(),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	program, err := suite.repository.Create(p)
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
	program.Subject = "My Subject Updated"
 | 
			
		||||
	program.Content = "My Content Updated"
 | 
			
		||||
	program.Tag = j
 | 
			
		||||
	program.Tags = j.String()
 | 
			
		||||
	program.Status = "draft"
 | 
			
		||||
 | 
			
		||||
	updatedProgram, err := suite.repository.Update(program)
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
	assert.Equal(suite.T(), program.Subject, updatedProgram.Subject)
 | 
			
		||||
	assert.Equal(suite.T(), program.Content, updatedProgram.Content)
 | 
			
		||||
	assert.Equal(suite.T(), program.Tag, updatedProgram.Tag)
 | 
			
		||||
	assert.Equal(suite.T(), program.Status, updatedProgram.Status)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 삭제 테스트
 | 
			
		||||
func (suite *ProgramTestSuite) TestDeleteProgramSuccess() {
 | 
			
		||||
	t := []string{"TAG"}
 | 
			
		||||
	var j datatypes.JSON
 | 
			
		||||
	j, _ = json.Marshal(t)
 | 
			
		||||
	p := &models.Program{
 | 
			
		||||
		ID:        uuid.NewString(),
 | 
			
		||||
		Subject:   "My Subject",
 | 
			
		||||
		Content:   "My Content",
 | 
			
		||||
		Tag:       j,
 | 
			
		||||
		Tags:      j.String(),
 | 
			
		||||
		Status:    "on",
 | 
			
		||||
		PublishAt: time.Now(),
 | 
			
		||||
		UpdatedAt: time.Now(),
 | 
			
		||||
		CreatedAt: time.Now(),
 | 
			
		||||
	}
 | 
			
		||||
	_, err := suite.repository.Create(p)
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
	err = suite.repository.Delete(p.ID)
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
	_, err = suite.repository.Find(p.ID)
 | 
			
		||||
	assert.Error(suite.T(), err)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										183
									
								
								test/quiz_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								test/quiz_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,183 @@
 | 
			
		||||
package learsteam_quiz_test
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"learnsteam/learsteam-quiz-api/internal/controllers"
 | 
			
		||||
	"learnsteam/learsteam-quiz-api/internal/models"
 | 
			
		||||
	"learnsteam/learsteam-quiz-api/internal/repositories"
 | 
			
		||||
	"learnsteam/learsteam-quiz-api/internal/services"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/uuid"
 | 
			
		||||
	"github.com/stretchr/testify/suite"
 | 
			
		||||
	"github.com/tj/assert"
 | 
			
		||||
	"gorm.io/datatypes"
 | 
			
		||||
	"gorm.io/driver/sqlite"
 | 
			
		||||
	"gorm.io/gorm"
 | 
			
		||||
	"gorm.io/gorm/schema"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
	program_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),
 | 
			
		||||
			ProgramID: program_id,
 | 
			
		||||
			Sequence:  i,
 | 
			
		||||
			QuizType:  "multiple",
 | 
			
		||||
			Question:  strconv.Itoa(i) + " question",
 | 
			
		||||
			Choice:    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(),
 | 
			
		||||
		ProgramID: uuid.NewString(),
 | 
			
		||||
		Sequence:  1,
 | 
			
		||||
		QuizType:  "multiple",
 | 
			
		||||
		Question:  "question",
 | 
			
		||||
		Choice:    j,
 | 
			
		||||
		Answer:    j,
 | 
			
		||||
		Hint:      "힌트입니다.",
 | 
			
		||||
		Comment:   "설명입니다.",
 | 
			
		||||
		UpdatedAt: time.Now(),
 | 
			
		||||
		CreatedAt: time.Now(),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	quiz, err := suite.repository.Create(q)
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
	quiz.QuizType = "check"
 | 
			
		||||
	quiz.Choice = j
 | 
			
		||||
	quiz.Answer = j
 | 
			
		||||
	quiz.Hint = "힌트입니다!"
 | 
			
		||||
 | 
			
		||||
	updatedQuiz, err := suite.repository.Update(quiz)
 | 
			
		||||
	assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
	assert.Equal(suite.T(), updatedQuiz.QuizType, quiz.QuizType)
 | 
			
		||||
	assert.Equal(suite.T(), updatedQuiz.Choice, quiz.Choice)
 | 
			
		||||
	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(),
 | 
			
		||||
		ProgramID: uuid.NewString(),
 | 
			
		||||
		Sequence:  1,
 | 
			
		||||
		QuizType:  "multiple",
 | 
			
		||||
		Question:  "question",
 | 
			
		||||
		Choice:    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)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										245
									
								
								test/token_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								test/token_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,245 @@
 | 
			
		||||
package learsteam_quiz_test
 | 
			
		||||
 | 
			
		||||
// type TokenTestSuite struct {
 | 
			
		||||
// 	suite.Suite
 | 
			
		||||
// 	db         *gorm.DB
 | 
			
		||||
// 	repository repositories.TokenRepository
 | 
			
		||||
// 	service    services.TokenService
 | 
			
		||||
// 	controller controllers.TokenController
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// func (suite *TokenTestSuite) SetupSuite() {
 | 
			
		||||
// 	err := os.Remove("test.db")
 | 
			
		||||
// 	if err != nil {
 | 
			
		||||
// 		suite.Fail("Failed to remove the test database file")
 | 
			
		||||
// 	}
 | 
			
		||||
 | 
			
		||||
// 	database.Init()
 | 
			
		||||
// 	gorm_config := gorm.Config{NamingStrategy: schema.NamingStrategy{SingularTable: true}}
 | 
			
		||||
// 	db, _ := gorm.Open(sqlite.Open("test.db"), &gorm_config)
 | 
			
		||||
// 	repository := repositories.NewTokenRepository(db)
 | 
			
		||||
// 	service := services.NewTokenService(repository)
 | 
			
		||||
// 	controller := controllers.NewTokenController(service)
 | 
			
		||||
 | 
			
		||||
// 	suite.db = db
 | 
			
		||||
// 	suite.service = service
 | 
			
		||||
// 	suite.repository = repository
 | 
			
		||||
// 	suite.controller = controller
 | 
			
		||||
 | 
			
		||||
// 	suite.CreateSampleData()
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// func (suite *TokenTestSuite) CreateSampleData() {
 | 
			
		||||
// 	suite.db.AutoMigrate(&models.Token{})
 | 
			
		||||
// 	var tokens []models.Token
 | 
			
		||||
// 	for i := 1; i < 100; i++ {
 | 
			
		||||
// 		expire_at := time.Now().Add(time.Hour * 24 * time.Duration(i+45))
 | 
			
		||||
// 		tokenString, _ := suite.service.Generate("superrichquiz_octet", expire_at.Unix())
 | 
			
		||||
// 		token := models.Token{
 | 
			
		||||
// 			ID:        uuid.NewString(),
 | 
			
		||||
// 			Token:     tokenString,
 | 
			
		||||
// 			Status:    "valid",
 | 
			
		||||
// 			ExpireAt:  expire_at,
 | 
			
		||||
// 			UpdatedAt: time.Now(),
 | 
			
		||||
// 			CreatedAt: time.Now(),
 | 
			
		||||
// 		}
 | 
			
		||||
// 		tokens = append(tokens, token)
 | 
			
		||||
// 	}
 | 
			
		||||
 | 
			
		||||
// 	for _, token := range tokens {
 | 
			
		||||
// 		suite.db.Create(&token)
 | 
			
		||||
// 	}
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// func (suite *TokenTestSuite) TearDownSuite() {
 | 
			
		||||
// 	// suite.db.Migrator().DropTable(&models.Token{})
 | 
			
		||||
 | 
			
		||||
// 	// err := os.Remove("test.db")
 | 
			
		||||
// 	// if err != nil {
 | 
			
		||||
// 	// 	suite.Fail("Failed to remove the test database file")
 | 
			
		||||
// 	// }
 | 
			
		||||
// }
 | 
			
		||||
// func (suite *TokenTestSuite) SetupTest() {
 | 
			
		||||
// 	// suite.userRepository.DeleteByName("testUserName0001")
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// func (suite *TokenTestSuite) TearDownTest() {
 | 
			
		||||
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// func TestTokenSuite(t *testing.T) {
 | 
			
		||||
// 	suite.Run(t, new(TokenTestSuite))
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// // 토큰 생성 테스트
 | 
			
		||||
// func (suite *TokenTestSuite) TestGenerateTokenSuccess() {
 | 
			
		||||
// 	user_id := "testuser"
 | 
			
		||||
// 	expire_at := time.Now().Add(time.Hour * 24 * 365).Unix()
 | 
			
		||||
// 	token, err := suite.service.Generate(user_id, expire_at)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.NotNil(suite.T(), token)
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// // 토큰 생성 테스트
 | 
			
		||||
// func (suite *TokenTestSuite) TestGenerateTokenString() {
 | 
			
		||||
// 	user_id := "superrichquiz_octet"
 | 
			
		||||
// 	expire_at := time.Now().Add(time.Hour * 24 * 365 * 100).Unix()
 | 
			
		||||
// 	tokenString, err := suite.service.Generate(user_id, expire_at)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
// 	jwtToken, err := suite.service.VerifyTokenString(tokenString)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.NotNil(suite.T(), jwtToken)
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// // 토큰 검증 테스트
 | 
			
		||||
// func (suite *TokenTestSuite) TestVerifyTokenString() {
 | 
			
		||||
// 	user_id := "testuser"
 | 
			
		||||
// 	expire_at := time.Now().Add(time.Hour * 24 * 365).Unix()
 | 
			
		||||
// 	tokenString, err := suite.service.Generate(user_id, expire_at)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
// 	jwtToken, err := suite.service.VerifyTokenString(tokenString)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.NotNil(suite.T(), jwtToken)
 | 
			
		||||
// 	assert.Equal(suite.T(), tokenString, jwtToken.Raw)
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// // 토큰 유효성 테스트
 | 
			
		||||
// func (suite *TokenTestSuite) TestValidToken() {
 | 
			
		||||
// 	user_id := "testuser"
 | 
			
		||||
// 	expire_at := time.Now().Add(time.Hour * 24 * 365).Unix()
 | 
			
		||||
// 	tokenString, err := suite.service.Generate(user_id, expire_at)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
// 	jwtToken, err := suite.service.VerifyTokenString(tokenString)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.NotNil(suite.T(), jwtToken)
 | 
			
		||||
 | 
			
		||||
// 	valid, err := suite.service.ValidToken(jwtToken)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.True(suite.T(), valid)
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// // 토큰 유효성 테스트 : Expire
 | 
			
		||||
// func (suite *TokenTestSuite) TestExpiredToken() {
 | 
			
		||||
// 	user_id := "testuser"
 | 
			
		||||
// 	expire_at := time.Now().Add(time.Hour * 1).Unix()
 | 
			
		||||
// 	tokenString, err := suite.service.Generate(user_id, expire_at)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
// 	jwtToken, err := suite.service.GetJwtToken(tokenString)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	// assert.Nil(suite.T(), jwtToken)
 | 
			
		||||
 | 
			
		||||
// 	expirationTime, err := jwtToken.Claims.GetExpirationTime()
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.Greater(suite.T(), expirationTime.Time, time.Now())
 | 
			
		||||
 | 
			
		||||
// 	expire_at = time.Now().Add(-time.Hour * 1).Unix()
 | 
			
		||||
// 	tokenString, err = suite.service.Generate(user_id, expire_at)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
// 	jwtToken, err = suite.service.GetJwtToken(tokenString)
 | 
			
		||||
// 	assert.Error(suite.T(), err)
 | 
			
		||||
// 	// assert.Nil(suite.T(), jwtToken)
 | 
			
		||||
 | 
			
		||||
// 	expirationTime, err = jwtToken.Claims.GetExpirationTime()
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.Greater(suite.T(), time.Now(), expirationTime.Time)
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// func (suite *TokenTestSuite) TestCreateToken() {
 | 
			
		||||
// 	dateString := "2023-08-15T01:50:08.706Z"
 | 
			
		||||
// 	layout := "2006-01-02T15:04:05.000Z"
 | 
			
		||||
// 	tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbklkeCI6MTc2NTQyLCJ0b2tlblR5cGUiOiJXQUxMRVQiLCJ0b2tlbkV4cGlyZWREYXRlIjoiMjAyMy0wOC0xNVQwMTo1MDowOC43MDZaIn0.skgP6ysLNx6KRDBYZy3miZW1Q95iV_Cw0ZVWXj1tJyw"
 | 
			
		||||
// 	expire_at, _ := time.Parse(layout, dateString)
 | 
			
		||||
// 	token := models.Token{
 | 
			
		||||
// 		ID:       uuid.NewString(),
 | 
			
		||||
// 		Token:    tokenString,
 | 
			
		||||
// 		Status:   "valid",
 | 
			
		||||
// 		ExpireAt: expire_at,
 | 
			
		||||
// 	}
 | 
			
		||||
// 	result, err := suite.repository.Create(&token)
 | 
			
		||||
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.Equal(suite.T(), tokenString, result.Token)
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// // 리프레시할 토큰 목록
 | 
			
		||||
// func (suite *TokenTestSuite) TestListOfTokensToRefresh() {
 | 
			
		||||
// 	tokens, err := suite.repository.ListRefresh()
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.NotNil(suite.T(), tokens)
 | 
			
		||||
// 	assert.Greater(suite.T(), len(*tokens), 0)
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// // 토큰 리프레시
 | 
			
		||||
// func (suite *TokenTestSuite) TestOldTokenRefresh() {
 | 
			
		||||
// 	tokens, err := suite.repository.ListRefresh()
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.NotNil(suite.T(), tokens)
 | 
			
		||||
 | 
			
		||||
// 	for _, token := range *tokens {
 | 
			
		||||
// 		token.Status = "expired"
 | 
			
		||||
// 		result, err := suite.repository.Update(&token)
 | 
			
		||||
// 		assert.NoError(suite.T(), err)
 | 
			
		||||
// 		assert.Equal(suite.T(), "expired", result.Status)
 | 
			
		||||
 | 
			
		||||
// 		user_id := "superrichquiz_octet"
 | 
			
		||||
// 		expire_at := result.ExpireAt.Add(time.Hour * 24 * 90)
 | 
			
		||||
// 		tokenString, err := suite.service.Generate(user_id, expire_at.Unix())
 | 
			
		||||
// 		assert.NoError(suite.T(), err)
 | 
			
		||||
 | 
			
		||||
// 		refreshedToken := models.Token{
 | 
			
		||||
// 			ID:       uuid.NewString(),
 | 
			
		||||
// 			Token:    tokenString,
 | 
			
		||||
// 			Status:   "valid",
 | 
			
		||||
// 			ExpireAt: expire_at,
 | 
			
		||||
// 		}
 | 
			
		||||
 | 
			
		||||
// 		newToken, err := suite.repository.Create(&refreshedToken)
 | 
			
		||||
// 		assert.NoError(suite.T(), err)
 | 
			
		||||
// 		assert.Equal(suite.T(), tokenString, newToken.Token)
 | 
			
		||||
// 	}
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// func (suite *TokenTestSuite) TestResponseToken() {
 | 
			
		||||
// 	respBody := []byte(`{
 | 
			
		||||
//     "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbklkeCI6MTc1MzU4LCJ0b2tlblR5cGUiOiJXQUxMRVQiLCJ0b2tlbkV4cGlyZWREYXRlIjoiMjAyMy0wOC0xNFQwNToxMTo1Ni41MzhaIn0.e1i4_y8ItC8Vje13Ew8NHwZTElOMBObIZjpGLgRCdyE",
 | 
			
		||||
//     "tokenBody": {
 | 
			
		||||
//         "tokenExpiredDate": "2023-08-13T06:06:12.065Z",
 | 
			
		||||
//         "tokenIdx": 174025,
 | 
			
		||||
//         "tokenType": "WALLET"
 | 
			
		||||
//     }
 | 
			
		||||
// 	}`)
 | 
			
		||||
 | 
			
		||||
// 	var response map[string]interface{}
 | 
			
		||||
// 	err := json.Unmarshal(respBody, &response)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.NotNil(suite.T(), response)
 | 
			
		||||
// 	assert.Equal(suite.T(), response["token"], "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbklkeCI6MTc1MzU4LCJ0b2tlblR5cGUiOiJXQUxMRVQiLCJ0b2tlbkV4cGlyZWREYXRlIjoiMjAyMy0wOC0xNFQwNToxMTo1Ni41MzhaIn0.e1i4_y8ItC8Vje13Ew8NHwZTElOMBObIZjpGLgRCdyE")
 | 
			
		||||
 | 
			
		||||
// 	tokenBody := response["tokenBody"].(map[string]interface{})
 | 
			
		||||
// 	tokenExpiredDate := tokenBody["tokenExpiredDate"].(string)
 | 
			
		||||
// 	assert.Equal(suite.T(), "2023-08-13T06:06:12.065Z", tokenExpiredDate)
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
// func (suite *TokenTestSuite) TestResponseError() {
 | 
			
		||||
// 	respBody := []byte(`{
 | 
			
		||||
//     "errorCode": "ERR_0105001",
 | 
			
		||||
//     "message": "Invalid token"
 | 
			
		||||
// 	}`)
 | 
			
		||||
 | 
			
		||||
// 	var response map[string]interface{}
 | 
			
		||||
// 	err := json.Unmarshal(respBody, &response)
 | 
			
		||||
// 	assert.NoError(suite.T(), err)
 | 
			
		||||
// 	assert.NotNil(suite.T(), response)
 | 
			
		||||
 | 
			
		||||
// 	assert.NotNil(suite.T(), response["errorCode"])
 | 
			
		||||
// 	assert.Equal(suite.T(), "ERR_0105001", response["errorCode"].(string))
 | 
			
		||||
 | 
			
		||||
// 	if response["errorCode"] != nil && response["errorCode"].(string) == "ERR_0105001" {
 | 
			
		||||
// 		assert.True(suite.T(), true)
 | 
			
		||||
// 	}
 | 
			
		||||
// }
 | 
			
		||||
		Reference in New Issue
	
	Block a user