release.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package test
  2. import (
  3. "errors"
  4. "github.com/porter-dev/porter/internal/models"
  5. "github.com/porter-dev/porter/internal/repository"
  6. "gorm.io/gorm"
  7. )
  8. // ReleaseRepository implements repository.ReleaseRepository
  9. type ReleaseRepository struct {
  10. canQuery bool
  11. releases []*models.Release
  12. }
  13. // NewReleaseRepository will return errors if canQuery is false
  14. func NewReleaseRepository(canQuery bool) repository.ReleaseRepository {
  15. return &ReleaseRepository{
  16. canQuery,
  17. []*models.Release{},
  18. }
  19. }
  20. // CreateRelease creates a new release
  21. func (repo *ReleaseRepository) CreateRelease(
  22. release *models.Release,
  23. ) (*models.Release, error) {
  24. if !repo.canQuery {
  25. return nil, errors.New("Cannot write database")
  26. }
  27. if release == nil {
  28. return nil, nil
  29. }
  30. repo.releases = append(repo.releases, release)
  31. release.ID = uint(len(repo.releases))
  32. return release, nil
  33. }
  34. // ReadRelease finds a release by id
  35. func (repo *ReleaseRepository) ReadReleaseByWebhookToken(
  36. token string,
  37. ) (*models.Release, error) {
  38. if !repo.canQuery {
  39. return nil, errors.New("Cannot read from database")
  40. }
  41. for _, release := range repo.releases {
  42. if release != nil && release.WebhookToken == token {
  43. return release, nil
  44. }
  45. }
  46. return nil, gorm.ErrRecordNotFound
  47. }
  48. // ReadRelease finds a release by id
  49. func (repo *ReleaseRepository) ReadRelease(
  50. clusterID uint, name, namespace string,
  51. ) (*models.Release, error) {
  52. if !repo.canQuery {
  53. return nil, errors.New("Cannot read from database")
  54. }
  55. for _, release := range repo.releases {
  56. if release != nil && release.ClusterID == clusterID && release.Name == name && release.Namespace == namespace {
  57. return release, nil
  58. }
  59. }
  60. return nil, gorm.ErrRecordNotFound
  61. }
  62. // ListReleasesByProjectID finds all releases for a given project id
  63. func (repo *ReleaseRepository) ListReleasesByImageRepoURI(
  64. clusterID uint, imageRepoURI string,
  65. ) ([]*models.Release, error) {
  66. if !repo.canQuery {
  67. return nil, errors.New("Cannot read from database")
  68. }
  69. res := make([]*models.Release, 0)
  70. for _, release := range repo.releases {
  71. if release != nil && release.ClusterID == clusterID && release.ImageRepoURI == imageRepoURI {
  72. res = append(res, release)
  73. }
  74. }
  75. return res, nil
  76. }
  77. // UpdateRelease modifies an existing Release in the database
  78. func (repo *ReleaseRepository) UpdateRelease(
  79. release *models.Release,
  80. ) (*models.Release, error) {
  81. if !repo.canQuery {
  82. return nil, errors.New("Cannot write database")
  83. }
  84. if int(release.ID-1) >= len(repo.releases) || repo.releases[release.ID-1] == nil {
  85. return nil, gorm.ErrRecordNotFound
  86. }
  87. index := int(release.ID - 1)
  88. repo.releases[index] = release
  89. return release, nil
  90. }
  91. // DeleteRelease removes a release from the array by setting it to nil
  92. func (repo *ReleaseRepository) DeleteRelease(
  93. release *models.Release,
  94. ) (*models.Release, error) {
  95. if !repo.canQuery {
  96. return nil, errors.New("Cannot write database")
  97. }
  98. if int(release.ID-1) >= len(repo.releases) || repo.releases[release.ID-1] == nil {
  99. return nil, gorm.ErrRecordNotFound
  100. }
  101. index := int(release.ID - 1)
  102. copy := repo.releases[index]
  103. repo.releases[index] = nil
  104. return copy, nil
  105. }