diff --git a/api/endpoints/project_environments_test.go b/api/endpoints/project_environments_test.go index a2e6e0c..150bb55 100644 --- a/api/endpoints/project_environments_test.go +++ b/api/endpoints/project_environments_test.go @@ -1,5 +1,16 @@ package api_test func (t *testSuite) TestProjectEnvironment_Get() { - t.T().Skip("Not yet implemented") + t.Factory.SaveOrganization(t.Factory.MakeOrganization()) + t.Factory.SaveProject(t.Factory.MakeProject()) + t.Factory.SaveEnvironment(t.Factory.MakeEnvironment()) + + res, bodyStr, errs := t.Client.Get("http://example.com/api/0/projects/acme-team/acme/environments/").End() + t.Nil(errs) + t.Equal(200, res.StatusCode) + t.JSONEq(`[{ + "id": "1", + "name": "" + }]`, + bodyStr) } diff --git a/db/store/project_store.go b/db/store/project_store.go index 4683db0..78a9000 100644 --- a/db/store/project_store.go +++ b/db/store/project_store.go @@ -87,6 +87,18 @@ func (s ProjectStore) SaveProject(project models.Project) error { return errors.Wrap(err, "failed to save project") } +func (s ProjectStore) SaveEnvironment(environment models.Environment) error { + db, err := db.FromE(s.c) + if err != nil { + return errors.Wrap(err, "failed to save project environment") + } + _, err = db.InsertInto("sentry_environment"). + Columns("id", "project_id", "name", "date_added"). + Record(environment). + Exec() + return errors.Wrap(err, "failed to save project environment") +} + func (s ProjectStore) SaveTags(tags ...*models.TagKey) error { db, err := db.FromE(s.c) if err != nil { diff --git a/migrations/postgres/0001_initial.up.sql b/migrations/postgres/0001_initial.up.sql index 070c0d1..a723183 100644 --- a/migrations/postgres/0001_initial.up.sql +++ b/migrations/postgres/0001_initial.up.sql @@ -14,6 +14,15 @@ create table sentry_project ( ); +create table sentry_environment ( + id serial not null, + project_id integer not null, + name character varying(64) not null, + date_added timestamp with time zone not null, + constraint sentry_environment_project_id_check check ((project_id >= 0)) +); + + create table sentry_filterkey ( id serial not null, project_id integer not null, diff --git a/testutil/factory/builder.go b/testutil/factory/builder.go index 7e43d5b..a3d16a3 100644 --- a/testutil/factory/builder.go +++ b/testutil/factory/builder.go @@ -95,6 +95,15 @@ func (tf TestFactory) MakeProject() models.Project { } } +func (tf TestFactory) MakeEnvironment() models.Environment { + return models.Environment{ + ID: 1, + ProjectID: 1, + Name: "", + DateCreated: time_of_2999_01_01__00_00_00, + } +} + func (tf TestFactory) MakeUser() models.User { return models.User{ ID: 1, diff --git a/testutil/factory/store.go b/testutil/factory/store.go index 1bb154f..057f043 100644 --- a/testutil/factory/store.go +++ b/testutil/factory/store.go @@ -30,6 +30,11 @@ func (tf TestFactory) SaveProject(project models.Project) { tf.noError(projectStore.SaveProject(project)) } +func (tf TestFactory) SaveEnvironment(environment models.Environment) { + projectStore := store.NewProjectStore(tf.ctx) + tf.noError(projectStore.SaveEnvironment(environment)) +} + func (tf TestFactory) SaveTags(tags ...*models.TagKey) { projectStore := store.NewProjectStore(tf.ctx) tf.noError(projectStore.SaveTags(tags...))