project_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package gorm_test
  2. import (
  3. "testing"
  4. "github.com/go-test/deep"
  5. "github.com/porter-dev/porter/internal/models"
  6. "gorm.io/gorm"
  7. orm "gorm.io/gorm"
  8. )
  9. func TestCreateProject(t *testing.T) {
  10. tester := &tester{
  11. dbFileName: "./porter_create_proj.db",
  12. }
  13. setupTestEnv(tester, t)
  14. defer cleanup(tester, t)
  15. proj := &models.Project{
  16. Name: "project-test",
  17. }
  18. proj, err := tester.repo.Project.CreateProject(proj)
  19. if err != nil {
  20. t.Fatalf("%v\n", err)
  21. }
  22. proj, err = tester.repo.Project.ReadProject(proj.Model.ID)
  23. if err != nil {
  24. t.Fatalf("%v\n", err)
  25. }
  26. // make sure id is 1 and name is "project-test"
  27. if proj.Model.ID != 1 {
  28. t.Errorf("incorrect project ID: expected %d, got %d\n", 1, proj.Model.ID)
  29. }
  30. if proj.Name != "project-test" {
  31. t.Errorf("incorrect project name: expected %s, got %s\n", "project-test", proj.Name)
  32. }
  33. }
  34. func TestCreateProjectRole(t *testing.T) {
  35. tester := &tester{
  36. dbFileName: "./porter_create_proj_role.db",
  37. }
  38. setupTestEnv(tester, t)
  39. initProject(tester, t)
  40. defer cleanup(tester, t)
  41. role := &models.Role{
  42. Kind: models.RoleAdmin,
  43. UserID: 0,
  44. ProjectID: tester.initProjects[0].Model.ID,
  45. }
  46. role, err := tester.repo.Project.CreateProjectRole(tester.initProjects[0], role)
  47. if err != nil {
  48. t.Fatalf("%v\n", err)
  49. }
  50. proj, err := tester.repo.Project.ReadProject(tester.initProjects[0].Model.ID)
  51. if err != nil {
  52. t.Fatalf("%v\n", err)
  53. }
  54. // make sure IDs are correct
  55. if proj.Model.ID != 1 {
  56. t.Errorf("incorrect project ID: expected %d, got %d\n", 1, proj.Model.ID)
  57. }
  58. if len(proj.Roles) != 1 {
  59. t.Fatalf("project roles incorrect length: expected %d, got %d\n", 1, len(proj.Roles))
  60. }
  61. if proj.Roles[0].Model.ID != 1 {
  62. t.Fatalf("incorrect role ID: expected %d, got %d\n", 1, proj.Roles[0].Model.ID)
  63. }
  64. // make sure data is correct
  65. expProj := &models.Project{
  66. Name: "project-test",
  67. Roles: []models.Role{
  68. models.Role{
  69. Kind: models.RoleAdmin,
  70. UserID: 0,
  71. ProjectID: 1,
  72. },
  73. },
  74. }
  75. copyProj := proj
  76. // reset fields for reflect.DeepEqual
  77. copyProj.Model = orm.Model{}
  78. copyProj.Roles[0].Model = orm.Model{}
  79. if diff := deep.Equal(copyProj, expProj); diff != nil {
  80. t.Errorf("incorrect project")
  81. t.Error(diff)
  82. }
  83. }
  84. func TestListProjectsByUserID(t *testing.T) {
  85. tester := &tester{
  86. dbFileName: "./list_projects_user_id.db",
  87. }
  88. setupTestEnv(tester, t)
  89. initUser(tester, t)
  90. // create two projects, same name
  91. initProject(tester, t)
  92. initProjectRole(tester, t)
  93. initProject(tester, t)
  94. role := &models.Role{
  95. Kind: models.RoleAdmin,
  96. UserID: 1,
  97. }
  98. role, err := tester.repo.Project.CreateProjectRole(tester.initProjects[1], role)
  99. if err != nil {
  100. t.Fatalf("%v\n", err)
  101. }
  102. defer cleanup(tester, t)
  103. projects, err := tester.repo.Project.ListProjectsByUserID(tester.initUsers[0].Model.ID)
  104. if err != nil {
  105. t.Fatalf("%v\n", err)
  106. }
  107. if len(projects) != 2 {
  108. t.Fatalf("projects length was not 2\n")
  109. }
  110. for i, project := range projects {
  111. // make sure data is correct
  112. expProj := &models.Project{
  113. Name: "project-test",
  114. Roles: []models.Role{
  115. models.Role{
  116. Kind: models.RoleAdmin,
  117. UserID: tester.initUsers[0].Model.ID,
  118. ProjectID: uint(i + 1),
  119. },
  120. },
  121. }
  122. copyProj := project
  123. // reset fields for reflect.DeepEqual
  124. copyProj.Model = orm.Model{}
  125. copyProj.Roles[0].Model = orm.Model{}
  126. if diff := deep.Equal(copyProj, expProj); diff != nil {
  127. t.Errorf("incorrect project")
  128. t.Error(diff)
  129. }
  130. }
  131. }
  132. func TestDeleteProject(t *testing.T) {
  133. tester := &tester{
  134. dbFileName: "./porter_create_proj_role.db",
  135. }
  136. setupTestEnv(tester, t)
  137. initProject(tester, t)
  138. defer cleanup(tester, t)
  139. proj, err := tester.repo.Project.DeleteProject(tester.initProjects[0])
  140. if err != nil {
  141. t.Fatalf("%v\n", err)
  142. }
  143. // attempt to read the project and ensure that the error is gorm.ErrRecordNotFound
  144. _, err = tester.repo.Project.ReadProject(proj.Model.ID)
  145. if err != gorm.ErrRecordNotFound {
  146. t.Fatalf("read should have returned record not found: returned %v\n", err)
  147. }
  148. }