Explorar o código

webhook unit test

sunguroku %!s(int64=5) %!d(string=hai) anos
pai
achega
771ac6b3e5

+ 1 - 0
cmd/migrate/main.go

@@ -28,6 +28,7 @@ func main() {
 		&models.Project{},
 		&models.Role{},
 		&models.User{},
+		&models.Release{},
 		&models.Session{},
 		&models.GitRepo{},
 		&models.Registry{},

+ 63 - 11
internal/repository/gorm/release_test.go

@@ -4,6 +4,7 @@ import (
 	"testing"
 
 	"github.com/porter-dev/porter/internal/models"
+	orm "gorm.io/gorm"
 )
 
 func TestCreateRelease(t *testing.T) {
@@ -28,18 +29,69 @@ func TestCreateRelease(t *testing.T) {
 		t.Fatalf("%v\n", err)
 	}
 
-	// release, err = tester.repo.Release.ReadRelease(release.Name, release.Namespace)
+	release, err = tester.repo.Release.ReadRelease(release.Name, release.Namespace)
 
-	// if err != nil {
-	// 	t.Fatalf("%v\n", err)
-	// }
+	if err != nil {
+		t.Fatalf("%v\n", err)
+	}
+
+	// make sure id and name are correct"
+	if release.Model.ID != 1 {
+		t.Errorf("incorrect release ID: expected %d, got %d\n", 1, release.Model.ID)
+	}
+
+	if release.Name != "denver-meister-dakota" {
+		t.Errorf("incorrect project name: expected %s, got %s\n", "denver-meister-dakota", release.Name)
+	}
+
+	if release.WebhookToken != "abcdefgh" {
+		t.Errorf("incorrect webhook token: expected %s, got %s\n", "abcdefgh", release.WebhookToken)
+	}
+
+	release, err = tester.repo.Release.ReadReleaseByWebhookToken(release.WebhookToken)
+
+	if release.Name != "denver-meister-dakota" {
+		t.Errorf("incorrect project name: expected %s, got %s\n", "denver-meister-dakota", release.Name)
+	}
+}
+
+func TestDeleteRelease(t *testing.T) {
+	tester := &tester{
+		dbFileName: "./porter_delete_release.db",
+	}
+
+	setupTestEnv(tester, t)
+	defer cleanup(tester, t)
+
+	release := &models.Release{
+		Name:         "denver-meister-dakota",
+		Namespace:    "default",
+		ProjectID:    1,
+		ClusterID:    1,
+		WebhookToken: "abcdefgh",
+	}
+
+	release, err := tester.repo.Release.CreateRelease(release)
+
+	if err != nil {
+		t.Fatalf("%v\n", err)
+	}
 
-	// make sure id is 1 and name is "project-test"
-	// if release.Model.ID != 1 {
-	// 	t.Errorf("incorrect release ID: expected %d, got %d\n", 1, release.Model.ID)
-	// }
+	release, err = tester.repo.Release.ReadRelease(release.Name, release.Namespace)
 
-	// if release.Name != "denver-meister-dakota" {
-	// 	t.Errorf("incorrect project name: expected %s, got %s\n", "project-test", release.Name)
-	// }
+	if err != nil {
+		t.Fatalf("%v\n", err)
+	}
+
+	_, err = tester.repo.Release.DeleteRelease(release)
+
+	if err != nil {
+		t.Fatalf("%v\n", err)
+	}
+
+	_, err = tester.repo.Release.ReadRelease(release.Name, release.Namespace)
+
+	if err != orm.ErrRecordNotFound {
+		t.Fatalf("incorrect error: expected %v, got %v\n", orm.ErrRecordNotFound, err)
+	}
 }

+ 1 - 0
internal/repository/gorm/repository.go

@@ -12,6 +12,7 @@ func NewRepository(db *gorm.DB, key *[32]byte) *repository.Repository {
 		User:             NewUserRepository(db),
 		Session:          NewSessionRepository(db),
 		Project:          NewProjectRepository(db),
+		Release:          NewReleaseRepository(db),
 		GitRepo:          NewGitRepoRepository(db, key),
 		Cluster:          NewClusterRepository(db, key),
 		HelmRepo:         NewHelmRepoRepository(db, key),

+ 18 - 5
server/api/deploy_handler.go

@@ -9,6 +9,7 @@ import (
 	"github.com/porter-dev/porter/internal/forms"
 	"github.com/porter-dev/porter/internal/helm"
 	"github.com/porter-dev/porter/internal/helm/loader"
+	"github.com/porter-dev/porter/internal/models"
 )
 
 // HandleDeployTemplate triggers a chart deployment from a template
@@ -92,11 +93,23 @@ func (app *App) HandleDeployTemplate(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
-	// write webhook token to db
-	// form.ReleaseForm.Form.Cluster.ID
-	// form.ReleaseForm.Form.Cluster.ProjectID
-	// form.ReleaseForm.Form.Namespace
-	// form.ChartTemplateForm.Name
+	// create release with webhook token in db
+	release := &models.Release{
+		ClusterID:    form.ReleaseForm.Form.Cluster.ID,
+		ProjectID:    form.ReleaseForm.Form.Cluster.ProjectID,
+		Namespace:    form.ReleaseForm.Form.Namespace,
+		Name:         form.ChartTemplateForm.Name,
+		WebhookToken: "abcdef",
+	}
+
+	_, err = app.Repo.Release.CreateRelease(release)
+
+	if err != nil {
+		app.sendExternalError(err, http.StatusInternalServerError, HTTPError{
+			Code:   ErrReleaseDeploy,
+			Errors: []string{"error creating a webhook: " + err.Error()},
+		}, w)
+	}
 
 	w.WriteHeader(http.StatusOK)
 }