| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package test
- import (
- "errors"
- "github.com/porter-dev/porter/internal/models"
- "github.com/porter-dev/porter/internal/repository"
- "gorm.io/gorm"
- )
- // ReleaseRepository implements repository.ReleaseRepository
- type ReleaseRepository struct {
- canQuery bool
- releases []*models.Release
- }
- // NewReleaseRepository will return errors if canQuery is false
- func NewReleaseRepository(canQuery bool) repository.ReleaseRepository {
- return &ReleaseRepository{
- canQuery,
- []*models.Release{},
- }
- }
- // CreateRelease creates a new release
- func (repo *ReleaseRepository) CreateRelease(
- release *models.Release,
- ) (*models.Release, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- if release == nil {
- return nil, nil
- }
- repo.releases = append(repo.releases, release)
- release.ID = uint(len(repo.releases))
- return release, nil
- }
- // ReadRelease finds a release by id
- func (repo *ReleaseRepository) ReadReleaseByWebhookToken(
- token string,
- ) (*models.Release, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot read from database")
- }
- for _, release := range repo.releases {
- if release != nil && release.WebhookToken == token {
- return release, nil
- }
- }
- return nil, gorm.ErrRecordNotFound
- }
- // ReadRelease finds a release by id
- func (repo *ReleaseRepository) ReadRelease(
- clusterID uint, name, namespace string,
- ) (*models.Release, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot read from database")
- }
- for _, release := range repo.releases {
- if release != nil && release.ClusterID == clusterID && release.Name == name && release.Namespace == namespace {
- return release, nil
- }
- }
- return nil, gorm.ErrRecordNotFound
- }
- // ListReleasesByProjectID finds all releases for a given project id
- func (repo *ReleaseRepository) ListReleasesByImageRepoURI(
- clusterID uint, imageRepoURI string,
- ) ([]*models.Release, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot read from database")
- }
- res := make([]*models.Release, 0)
- for _, release := range repo.releases {
- if release != nil && release.ClusterID == clusterID && release.ImageRepoURI == imageRepoURI {
- res = append(res, release)
- }
- }
- return res, nil
- }
- // UpdateRelease modifies an existing Release in the database
- func (repo *ReleaseRepository) UpdateRelease(
- release *models.Release,
- ) (*models.Release, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- if int(release.ID-1) >= len(repo.releases) || repo.releases[release.ID-1] == nil {
- return nil, gorm.ErrRecordNotFound
- }
- index := int(release.ID - 1)
- repo.releases[index] = release
- return release, nil
- }
- // DeleteRelease removes a release from the array by setting it to nil
- func (repo *ReleaseRepository) DeleteRelease(
- release *models.Release,
- ) (*models.Release, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- if int(release.ID-1) >= len(repo.releases) || repo.releases[release.ID-1] == nil {
- return nil, gorm.ErrRecordNotFound
- }
- index := int(release.ID - 1)
- copy := repo.releases[index]
- repo.releases[index] = nil
- return copy, nil
- }
|