From 7d7f961236bfe06b4ed7e15796bab513a054956f Mon Sep 17 00:00:00 2001 From: Thomasevano Date: Sat, 7 Oct 2023 10:40:30 +0200 Subject: [PATCH] tests(api): add stack_repository_test --- api/src/repositories/stack_repository_test.go | 131 ++++++++++++++++++ .../migrations/1_tests_data.up.sql | 22 ++- 2 files changed, 150 insertions(+), 3 deletions(-) create mode 100644 api/src/repositories/stack_repository_test.go diff --git a/api/src/repositories/stack_repository_test.go b/api/src/repositories/stack_repository_test.go new file mode 100644 index 00000000..54a33740 --- /dev/null +++ b/api/src/repositories/stack_repository_test.go @@ -0,0 +1,131 @@ +package repositories_test + +import ( + "github.com/RomainDreidemy/MT5-docker-extension/src/models" + "github.com/RomainDreidemy/MT5-docker-extension/src/repositories" + "github.com/RomainDreidemy/MT5-docker-extension/src/test_helpers" + "github.com/google/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" + "math/rand" + "testing" +) + +type StackRepoTestSuite struct { + suite.Suite +} + +func (suite *StackRepoTestSuite) TestFindStack() { + pool, resource := test_helpers.IntegrationTestSetup() + defer test_helpers.IntegrationTestTeardown(pool, resource) + + // Given + uuid.SetRand(rand.New(rand.NewSource(1))) + stackId := "2935b117-880c-4f73-be89-de8fba6b196e" + userId := uuid.MustParse("14b953e8-30f9-47fc-943b-85d54cbcd54c") + expectedStackID := uuid.MustParse("2935b117-880c-4f73-be89-de8fba6b196e") + expectedStack := models.Stack{ + ID: &expectedStackID, + Name: "DockerEasy", + Description: "stack of docker easy", + UserID: &userId, + Services: []models.Service(nil), + Networks: []models.Network(nil), + ManagedVolumes: []models.ManagedVolume(nil), + } + + // When + stack, _ := repositories.FindStack(stackId) + + // Then + assert.Equal(suite.T(), expectedStack, stack, "it find the right stack") +} + +func (suite *StackRepoTestSuite) TestFindStackWithAssociations() { + pool, resource := test_helpers.IntegrationTestSetup() + defer test_helpers.IntegrationTestTeardown(pool, resource) + + // Given + uuid.SetRand(rand.New(rand.NewSource(1))) + stackId := "2935b117-880c-4f73-be89-de8fba6b196e" + userId := uuid.MustParse("14b953e8-30f9-47fc-943b-85d54cbcd54c") + expectedStackID := uuid.MustParse("2935b117-880c-4f73-be89-de8fba6b196e") + + expectedStack := models.Stack{ + ID: &expectedStackID, + Name: "DockerEasy", + Description: "stack of docker easy", + UserID: &userId, + Services: []models.Service(nil), + Networks: []models.Network{}, + ManagedVolumes: []models.ManagedVolume(nil), + } + + // When + stack, _ := repositories.FindStackWithAssociations(stackId) + + // Then + assert.Equal(suite.T(), expectedStack, stack, "Stack doesn't have the right associations") + +} + +func (suite *StackRepoTestSuite) TestGetStackByIdForAUser() { + pool, resource := test_helpers.IntegrationTestSetup() + defer test_helpers.IntegrationTestTeardown(pool, resource) + + // Given + uuid.SetRand(rand.New(rand.NewSource(1))) + stackId := "2935b117-880c-4f73-be89-de8fba6b196e" + userId := uuid.MustParse("14b953e8-30f9-47fc-943b-85d54cbcd54c") + expectedStackID := uuid.MustParse("2935b117-880c-4f73-be89-de8fba6b196e") + + expectedStack := models.Stack{ + ID: &expectedStackID, + Name: "DockerEasy", + Description: "stack of docker easy", + UserID: &userId, + Services: []models.Service(nil), + Networks: []models.Network(nil), + ManagedVolumes: []models.ManagedVolume(nil), + } + + // When + _, stack := repositories.GetStackByIdForAUser(stackId, userId) + + // Then + assert.Equal(suite.T(), expectedStack, stack, "Stack doesn't have the right associations") +} + +func (suite *StackRepoTestSuite) TestGetStacksForAUser() { + pool, resource := test_helpers.IntegrationTestSetup() + defer test_helpers.IntegrationTestTeardown(pool, resource) + + // Given + uuid.SetRand(rand.New(rand.NewSource(1))) + userId := uuid.MustParse("14b953e8-30f9-47fc-943b-85d54cbcd54c") + expectedStackID := uuid.MustParse("2935b117-880c-4f73-be89-de8fba6b196e") + + expectedStack := models.Stack{ + ID: &expectedStackID, + Name: "DockerEasy", + Description: "stack of docker easy", + UserID: &userId, + Services: []models.Service(nil), + Networks: []models.Network(nil), + ManagedVolumes: []models.ManagedVolume(nil), + } + + expectedStacks := []models.Stack{ + expectedStack, + } + + // When + stacks, _ := repositories.GetStacksForAUser(userId) + + // Then + assert.Equal(suite.T(), expectedStacks, stacks, "Stack doesn't correspond to user") +} + +func TestStackRepoTestSuite(t *testing.T) { + suite.Run(t, new(StackRepoTestSuite)) +} diff --git a/api/src/test_helpers/migrations/1_tests_data.up.sql b/api/src/test_helpers/migrations/1_tests_data.up.sql index a547b3dc..35126750 100644 --- a/api/src/test_helpers/migrations/1_tests_data.up.sql +++ b/api/src/test_helpers/migrations/1_tests_data.up.sql @@ -3,11 +3,27 @@ -- INSERT INTO users (id, email, password) values - ('14b953e8-30f9-47fc-943b-85d54cbcd54c', 'test@example.net', 'testpassword'); + ('14b953e8-30f9-47fc-943b-85d54cbcd54c', 'test@example.net', '$2a$10$MPxChzrFB1IN4KADLezz.O1Z/5gY3.iBAbMB9/ZeimHTYHFfW.yia'); INSERT INTO stacks (id, name, description, user_id) values - ('2935b117-880c-4f73-be89-de8fba6b196e', 'stack1', 'stack', '14b953e8-30f9-47fc-943b-85d54cbcd54c'); + ('2935b117-880c-4f73-be89-de8fba6b196e', 'DockerEasy', 'stack of docker easy', '14b953e8-30f9-47fc-943b-85d54cbcd54c'); INSERT INTO services (id, name, docker_image, docker_tag, entrypoint, description, position_x, position_y, context, dockerfile, stack_id, container_name, env_file) values - ('e477175f-dfce-4426-acfb-13fe7a71b2d2', 'service', '', '', '', 'un service de la stack', 20.00000000, 20.00000000, '', '', '2935b117-880c-4f73-be89-de8fba6b196e', '', ''); + ('1a29bb76-7c29-4992-9407-8ca77507a616', 'api', 'ghcr.io/romaindreidemy/mt5-easydocker/api', 'latest', '', '', 10.00000000, 10.00000000, '', '', '2935b117-880c-4f73-be89-de8fba6b196e', 'api', ''), + ('1cffb358-d9dd-40f4-88d5-dd1bc66565b3', 'database', 'postgres', '15', '', '', 260.00000000, 10.00000000, '', '', '2935b117-880c-4f73-be89-de8fba6b196e', 'database', ''), + ('457f0d0b-0d3b-4fee-9e65-fd5dcf9ea833', 'front', 'ghcr.io/romaindreidemy/mt5-easydocker/front', 'latest', '', '', 510.00000000, 10.00000000, '', '', '2935b117-880c-4f73-be89-de8fba6b196e', 'front', ''); + +INSERT INTO service_env_variables (id, key, value, service_id) values + ('fa3d8104-312d-4e25-bbe3-cc72201fba40', 'POSTGRES_USER', '${POSTGRES_USER}', '1cffb358-d9dd-40f4-88d5-dd1bc66565b3'), + ('620f8876-9b69-4004-9dee-719f4b687267', 'POSTGRES_PASSWORD', '${POSTGRES_PASSWORD}', '1cffb358-d9dd-40f4-88d5-dd1bc66565b3'), + ('f2fefa07-ce78-4435-9f7d-24d177d22770', 'POSTGRES_DB', '${POSTGRES_DB}', '1cffb358-d9dd-40f4-88d5-dd1bc66565b3'); + +INSERT INTO service_ports (id, private, public, service_id) values + ('25ad3904-4059-4327-9e4c-9494d581b827', 3000, 0, '1a29bb76-7c29-4992-9407-8ca77507a616'), + ('542be3a7-e04f-468e-bdde-d76a668a2ce9', 5432, 0, '1cffb358-d9dd-40f4-88d5-dd1bc66565b3'), + ('bbb18269-3b71-4a2f-859c-c0c04d062ed5', 80, 0, '457f0d0b-0d3b-4fee-9e65-fd5dcf9ea833'); + +INSERT INTO service_volumes (id, local_path, container_path, service_id) values + ('e0b6c940-733d-469e-b570-406ff5faaf43', './.env', '/app/.env', '1a29bb76-7c29-4992-9407-8ca77507a616'), + ('f225e477-6966-43b5-99dc-1898a8ad7f60', './tmp/database', '/var/lib/postgresql/data', '1cffb358-d9dd-40f4-88d5-dd1bc66565b3');