@@ -2,13 +2,14 @@ import { beforeEach, describe, expect, it } from 'vitest'
22import { createProject , getAllProjects } from './project-repository'
33import { runMigration } from '../db/database-migration-util'
44import { db } from '../db/database'
5- import type { CreateProjectFormSchema , SelectableProject } from './project'
5+ import type { ProjectCreationParams , SelectableProject } from './project'
66import type { Languages } from 'kysely-codegen'
77import type { Selectable } from 'kysely'
88
9- const projectCreationObject : CreateProjectFormSchema = {
9+ const projectCreationObject : ProjectCreationParams = {
1010 name : 'Test Project' ,
11- base_language : 'en'
11+ base_language_code : 'en' ,
12+ slug : 'test-project'
1213}
1314
1415beforeEach ( async ( ) => {
@@ -29,7 +30,7 @@ describe('Project Repository', () => {
2930 expect ( project ) . toMatchObject ( {
3031 id : createdProject . id ,
3132 name : projectCreationObject . name ,
32- base_language : createdProject . base_language
33+ base_language_id : createdProject . base_language_id
3334 } )
3435
3536 expect ( project . id ) . toBeTypeOf ( 'number' )
@@ -44,6 +45,26 @@ describe('Project Repository', () => {
4445 expect ( projects ) . toHaveLength ( 1 )
4546 } )
4647
48+ it ( 'should not allow creation of projects with duplicate slugs' , async ( ) => {
49+ const projectCreationObject1 = {
50+ name : 'Test Project' ,
51+ base_language_code : 'en' ,
52+ slug : 'test-project'
53+ }
54+ const projectCreationObject2 = {
55+ name : 'test-project' ,
56+ base_language_code : 'en' ,
57+ slug : 'test-project'
58+ }
59+
60+ await createProject ( projectCreationObject1 )
61+
62+ await expect ( createProject ( projectCreationObject2 ) ) . rejects . toThrow ( )
63+
64+ const projects = await db . selectFrom ( 'projects' ) . selectAll ( ) . execute ( )
65+ expect ( projects ) . toHaveLength ( 1 )
66+ } )
67+
4768 it ( 'should create a base language for the project' , async ( ) => {
4869 const createdProject = await createProject ( projectCreationObject )
4970
@@ -53,26 +74,26 @@ describe('Project Repository', () => {
5374 const language = languages [ 0 ] as Selectable < Languages >
5475
5576 expect ( language . project_id ) . toBe ( createdProject . id )
56- expect ( language . code ) . toBe ( projectCreationObject . base_language )
77+ expect ( language . code ) . toBe ( projectCreationObject . base_language_code )
5778 } )
5879
5980 it ( 'should link the base language to the project' , async ( ) => {
6081 const createdProject = await createProject ( projectCreationObject )
6182
62- expect ( createdProject . base_language ) . not . toBe ( 0 )
83+ expect ( createdProject . base_language_id ) . not . toBe ( 0 )
6384
6485 const language = await db
6586 . selectFrom ( 'languages' )
66- . where ( 'id' , '==' , createdProject . base_language )
87+ . where ( 'id' , '==' , createdProject . base_language_id )
6788 . selectAll ( )
6889 . executeTakeFirstOrThrow ( )
6990
7091 expect ( language . project_id ) . toBe ( createdProject . id )
7192 } )
7293
7394 it ( 'should allow creation of multiple projects with the same base language code' , async ( ) => {
74- const project1 = { name : 'Project 1' , base_language : 'en' }
75- const project2 = { name : 'Project 2' , base_language : 'en' }
95+ const project1 = { name : 'Project 1' , base_language_code : 'en' , slug : 'project-1 ' }
96+ const project2 = { name : 'Project 2' , base_language_code : 'en' , slug : 'project-2 ' }
7697
7798 await createProject ( project1 )
7899 await createProject ( project2 )
@@ -95,8 +116,8 @@ describe('Project Repository', () => {
95116 } )
96117
97118 it ( 'should return all created projects' , async ( ) => {
98- const project1 = { name : 'Project 1' , base_language : 'en' }
99- const project2 = { name : 'Project 2' , base_language : 'fr' }
119+ const project1 = { name : 'Project 1' , base_language_code : 'en' , slug : 'project-1 ' }
120+ const project2 = { name : 'Project 2' , base_language_code : 'fr' , slug : 'project-2 ' }
100121
101122 await createProject ( project1 )
102123 await createProject ( project2 )
@@ -120,7 +141,7 @@ describe('Project Repository', () => {
120141 expect ( project ) . toMatchObject ( {
121142 id : createdProject . id ,
122143 name : projectCreationObject . name ,
123- base_language : createdProject . base_language
144+ base_language_id : createdProject . base_language_id
124145 } )
125146
126147 expect ( project . id ) . toBeTypeOf ( 'number' )
0 commit comments