Skip to content

Commit

Permalink
atlasexec: change migrate push context type (#32)
Browse files Browse the repository at this point in the history
  • Loading branch information
dorav committed Nov 1, 2023
1 parent 31b968e commit 4863ae9
Show file tree
Hide file tree
Showing 2 changed files with 130 additions and 5 deletions.
10 changes: 7 additions & 3 deletions atlasexec/atlas.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ type (
DirURL string
DirFormat string
LockTimeout string
Context string
Context *RunContext
ConfigURL string
Env string
Vars Vars
Expand Down Expand Up @@ -186,8 +186,12 @@ func (c *Client) MigratePush(ctx context.Context, params *MigratePushParams) (st
if params.LockTimeout != "" {
args = append(args, "--lock-timeout", params.LockTimeout)
}
if params.Context != "" {
args = append(args, "--context", params.Context)
if params.Context != nil {
buf, err := json.Marshal(params.Context)
if err != nil {
return "", err
}
args = append(args, "--context", string(buf))
}
if params.ConfigURL != "" {
args = append(args, "--config", params.ConfigURL)
Expand Down
125 changes: 123 additions & 2 deletions atlasexec/atlas_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func Test_MigrateApply(t *testing.T) {

func Test_MigrateApplyWithRemote(t *testing.T) {
type (
ContextInput struct {
RunContext struct {
TriggerType string `json:"triggerType,omitempty"`
TriggerVersion string `json:"triggerVersion,omitempty"`
}
Expand All @@ -73,7 +73,7 @@ func Test_MigrateApplyWithRemote(t *testing.T) {
Variables json.RawMessage `json:"variables"`
MigrateApplyReport struct {
Input struct {
Context *ContextInput `json:"context,omitempty"`
Context *RunContext `json:"context,omitempty"`
} `json:"input"`
}
}
Expand Down Expand Up @@ -420,6 +420,127 @@ func TestMigrateLintWithLogin(t *testing.T) {
})
}

func TestMigratePush(t *testing.T) {
type (
graphQLQuery struct {
Query string `json:"query"`
Variables json.RawMessage `json:"variables"`
PushDir *struct {
Input struct {
Slug string `json:"slug"`
Tag string `json:"tag"`
Driver string `json:"driver"`
Dir string `json:"dir"`
} `json:"input"`
}
SyncDir *struct {
Input struct {
Slug string `json:"slug"`
Driver string `json:"driver"`
Dir string `json:"dir"`
Context *atlasexec.RunContext `json:"context"`
} `json:"input"`
}
}
httpTest struct {
payloads []graphQLQuery
srv *httptest.Server
}
)
token := "123456789"
newHTTPTest := func() (*httpTest, string) {
tt := &httpTest{}
handler := func() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
require.Equal(t, "Bearer "+token, r.Header.Get("Authorization"))
var query graphQLQuery
require.NoError(t, json.NewDecoder(r.Body).Decode(&query))
if strings.Contains(query.Query, "pushDir") {
err := json.Unmarshal(query.Variables, &query.PushDir)
require.NoError(t, err)
fmt.Fprint(w, `{"data":{"pushDir":{"url":"https://some-org.atlasgo.cloud/dirs/314159/tags/12345"}}}`)
}
if strings.Contains(query.Query, "syncDir") {
err := json.Unmarshal(query.Variables, &query.SyncDir)
require.NoError(t, err)
fmt.Fprint(w, `{"data":{"syncDir":{"url":"https://some-org.atlasgo.cloud/dirs/314159/tags/12345"}}}`)
}
tt.payloads = append(tt.payloads, query)
}
}
tt.srv = httptest.NewServer(handler())
t.Cleanup(tt.srv.Close)
return tt, generateHCL(t, token, tt.srv)
}
c, err := atlasexec.NewClient(".", "atlas")
require.NoError(t, err)
inputContext := &atlasexec.RunContext{
Repo: "testing-repo",
Path: "path/to/dir",
Branch: "testing-branch",
Commit: "sha123",
URL: "this://is/a/url",
}
t.Run("sync", func(t *testing.T) {
params := &atlasexec.MigratePushParams{
DevURL: "sqlite://file?mode=memory",
DirURL: "file://testdata/migrations",
Name: "test-dir-slug",
Env: "test",
}
t.Run("with context", func(t *testing.T) {
tt, atlasConfigURL := newHTTPTest()
params.ConfigURL = atlasConfigURL
got, err := c.MigratePush(context.Background(), params)
require.NoError(t, err)
require.Len(t, tt.payloads, 2)
require.Equal(t, `https://some-org.atlasgo.cloud/dirs/314159/tags/12345`, got)
p := &tt.payloads[1]
require.Contains(t, p.Query, "syncDir")
require.Equal(t, "test-dir-slug", p.SyncDir.Input.Slug)
require.Equal(t, "SQLITE", p.SyncDir.Input.Driver)
require.NotEmpty(t, p.SyncDir.Input.Dir)
})
t.Run("without context", func(t *testing.T) {
tt, atlasConfigURL := newHTTPTest()
params.ConfigURL = atlasConfigURL
params.Context = inputContext
got, err := c.MigratePush(context.Background(), params)
require.NoError(t, err)
require.Equal(t, `https://some-org.atlasgo.cloud/dirs/314159/tags/12345`, got)
require.Len(t, tt.payloads, 2)
p := &tt.payloads[1]
require.Contains(t, p.Query, "syncDir")
err = json.Unmarshal(p.Variables, &p.SyncDir)
require.NoError(t, err)
require.Equal(t, inputContext, p.SyncDir.Input.Context)
})

})
t.Run("push", func(t *testing.T) {
tt, atlasConfigURL := newHTTPTest()
params := &atlasexec.MigratePushParams{
ConfigURL: atlasConfigURL,
DevURL: "sqlite://file?mode=memory",
DirURL: "file://testdata/migrations",
Name: "test-dir-slug",
Context: inputContext,
Env: "test",
Tag: "this-is-my-tag",
}
got, err := c.MigratePush(context.Background(), params)
require.NoError(t, err)
require.Equal(t, `https://some-org.atlasgo.cloud/dirs/314159/tags/12345`, got)
require.Len(t, tt.payloads, 2)
p := &tt.payloads[1]
require.Contains(t, p.Query, "pushDir")
require.Equal(t, "test-dir-slug", p.PushDir.Input.Slug)
require.Equal(t, "SQLITE", p.PushDir.Input.Driver)
require.Equal(t, "this-is-my-tag", p.PushDir.Input.Tag)
require.NotEmpty(t, p.PushDir.Input.Dir)
})
}

func generateHCL(t *testing.T, token string, srv *httptest.Server) string {
st := fmt.Sprintf(
`atlas {
Expand Down

0 comments on commit 4863ae9

Please sign in to comment.