| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- package gorm_test
- import (
- "testing"
- "github.com/go-test/deep"
- "github.com/porter-dev/porter/api/types"
- "github.com/porter-dev/porter/internal/models"
- "gorm.io/gorm"
- orm "gorm.io/gorm"
- )
- func TestCreateProject(t *testing.T) {
- tester := &tester{
- dbFileName: "./porter_create_proj.db",
- }
- setupTestEnv(tester, t)
- defer cleanup(tester, t)
- proj := &models.Project{
- Name: "project-test",
- }
- proj, err := tester.repo.Project().CreateProject(proj)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- proj, err = tester.repo.Project().ReadProject(proj.Model.ID)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- // make sure id is 1 and name is "project-test"
- if proj.Model.ID != 1 {
- t.Errorf("incorrect project ID: expected %d, got %d\n", 1, proj.Model.ID)
- }
- if proj.Name != "project-test" {
- t.Errorf("incorrect project name: expected %s, got %s\n", "project-test", proj.Name)
- }
- }
- func TestCreateProjectRole(t *testing.T) {
- tester := &tester{
- dbFileName: "./porter_create_proj_role.db",
- }
- setupTestEnv(tester, t)
- initProject(tester, t)
- defer cleanup(tester, t)
- role := &models.Role{
- Role: types.Role{
- Kind: types.RoleAdmin,
- UserID: 0,
- ProjectID: tester.initProjects[0].Model.ID,
- },
- }
- role, err := tester.repo.Project().CreateProjectRole(tester.initProjects[0], role)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- proj, err := tester.repo.Project().ReadProject(tester.initProjects[0].Model.ID)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- // make sure IDs are correct
- if proj.Model.ID != 1 {
- t.Errorf("incorrect project ID: expected %d, got %d\n", 1, proj.Model.ID)
- }
- if len(proj.Roles) != 1 {
- t.Fatalf("project roles incorrect length: expected %d, got %d\n", 1, len(proj.Roles))
- }
- if proj.Roles[0].Model.ID != 1 {
- t.Fatalf("incorrect role ID: expected %d, got %d\n", 1, proj.Roles[0].Model.ID)
- }
- // make sure data is correct
- expProj := &models.Project{
- Name: "project-test",
- Roles: []models.Role{
- {
- Role: types.Role{
- Kind: types.RoleAdmin,
- UserID: 0,
- ProjectID: 1,
- },
- },
- },
- }
- copyProj := proj
- // reset fields for reflect.DeepEqual
- copyProj.Model = orm.Model{}
- copyProj.Roles[0].Model = orm.Model{}
- if diff := deep.Equal(copyProj, expProj); diff != nil {
- t.Errorf("incorrect project")
- t.Error(diff)
- }
- }
- func TestUpdateProjectRole(t *testing.T) {
- tester := &tester{
- dbFileName: "./porter_update_proj_role.db",
- }
- setupTestEnv(tester, t)
- initProject(tester, t)
- initUser(tester, t)
- initProjectRole(tester, t)
- defer cleanup(tester, t)
- role := &models.Role{
- Role: types.Role{
- Kind: types.RoleViewer,
- UserID: tester.initUsers[0].Model.ID,
- ProjectID: tester.initProjects[0].Model.ID,
- },
- }
- role, err := tester.repo.Project().UpdateProjectRole(tester.initProjects[0].Model.ID, role)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- proj, err := tester.repo.Project().ReadProject(tester.initProjects[0].Model.ID)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- // make sure IDs are correct
- if proj.Model.ID != 1 {
- t.Errorf("incorrect project ID: expected %d, got %d\n", 1, proj.Model.ID)
- }
- if len(proj.Roles) != 1 {
- t.Fatalf("project roles incorrect length: expected %d, got %d\n", 1, len(proj.Roles))
- }
- if proj.Roles[0].Model.ID != 1 {
- t.Fatalf("incorrect role ID: expected %d, got %d\n", 1, proj.Roles[0].Model.ID)
- }
- // make sure data is correct
- expProj := &models.Project{
- Name: "project-test",
- Roles: []models.Role{
- {
- Role: types.Role{
- Kind: types.RoleViewer,
- UserID: 1,
- ProjectID: 1,
- },
- },
- },
- }
- copyProj := proj
- // reset fields for reflect.DeepEqual
- copyProj.Model = orm.Model{}
- copyProj.Roles[0].Model = orm.Model{}
- if diff := deep.Equal(copyProj, expProj); diff != nil {
- t.Errorf("incorrect project")
- t.Error(diff)
- }
- }
- func TestListProjectsByUserID(t *testing.T) {
- tester := &tester{
- dbFileName: "./list_projects_user_id.db",
- }
- setupTestEnv(tester, t)
- initUser(tester, t)
- // create two projects, same name
- initProject(tester, t)
- initProjectRole(tester, t)
- initProject(tester, t)
- role := &models.Role{
- Role: types.Role{
- Kind: types.RoleAdmin,
- UserID: 1,
- },
- }
- role, err := tester.repo.Project().CreateProjectRole(tester.initProjects[1], role)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- defer cleanup(tester, t)
- projects, err := tester.repo.Project().ListProjectsByUserID(tester.initUsers[0].Model.ID)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- if len(projects) != 2 {
- t.Fatalf("projects length was not 2\n")
- }
- for i, project := range projects {
- // make sure data is correct
- expProj := &models.Project{
- Name: "project-test",
- Roles: []models.Role{
- {
- Role: types.Role{
- Kind: types.RoleAdmin,
- UserID: tester.initUsers[0].Model.ID,
- ProjectID: uint(i + 1),
- },
- },
- },
- }
- copyProj := project
- // reset fields for reflect.DeepEqual
- copyProj.Model = orm.Model{}
- copyProj.Roles[0].Model = orm.Model{}
- if diff := deep.Equal(copyProj, expProj); diff != nil {
- t.Errorf("incorrect project")
- t.Error(diff)
- }
- }
- }
- func TestReadProjectRole(t *testing.T) {
- tester := &tester{
- dbFileName: "./get_project_role.db",
- }
- setupTestEnv(tester, t)
- initUser(tester, t)
- // create two projects, same name
- initProject(tester, t)
- initProjectRole(tester, t)
- defer cleanup(tester, t)
- role, err := tester.repo.Project().ReadProjectRole(1, 1)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- role.Model = gorm.Model{}
- expRole := &models.Role{
- Role: types.Role{
- Kind: types.RoleAdmin,
- UserID: 1,
- ProjectID: 1,
- },
- }
- if diff := deep.Equal(role, expRole); diff != nil {
- t.Errorf("incorrect role")
- t.Error(diff)
- }
- }
- func TestDeleteProject(t *testing.T) {
- tester := &tester{
- dbFileName: "./porter_delete_proj.db",
- }
- setupTestEnv(tester, t)
- initProject(tester, t)
- defer cleanup(tester, t)
- proj, err := tester.repo.Project().DeleteProject(tester.initProjects[0])
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- // attempt to read the project and ensure that the error is gorm.ErrRecordNotFound
- _, err = tester.repo.Project().ReadProject(proj.Model.ID)
- if err != gorm.ErrRecordNotFound {
- t.Fatalf("read should have returned record not found: returned %v\n", err)
- }
- }
- func TestDeleteProjectRole(t *testing.T) {
- tester := &tester{
- dbFileName: "./porter_delete_proj_role.db",
- }
- setupTestEnv(tester, t)
- initProject(tester, t)
- initUser(tester, t)
- initProjectRole(tester, t)
- defer cleanup(tester, t)
- _, err := tester.repo.Project().DeleteProjectRole(tester.initProjects[0].Model.ID, tester.initUsers[0].Model.ID)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- // attempt to read the project and ensure that the error is gorm.ErrRecordNotFound
- proj, err := tester.repo.Project().ReadProject(tester.initProjects[0].Model.ID)
- if err != nil {
- t.Fatalf("%v\n", err)
- }
- // make sure IDs are correct
- if proj.Model.ID != 1 {
- t.Errorf("incorrect project ID: expected %d, got %d\n", 1, proj.Model.ID)
- }
- if len(proj.Roles) != 0 {
- t.Fatalf("project roles incorrect length: expected %d, got %d\n", 0, len(proj.Roles))
- }
- // make sure data is correct
- expProj := &models.Project{
- Name: "project-test",
- Roles: []models.Role{},
- }
- copyProj := proj
- // reset fields for reflect.DeepEqual
- copyProj.Model = orm.Model{}
- if diff := deep.Equal(copyProj, expProj); diff != nil {
- t.Errorf("incorrect project")
- t.Error(diff)
- }
- }
|