Skip to content

Commit

Permalink
atlasexec: change migrate push context type
Browse files Browse the repository at this point in the history
  • Loading branch information
dorav committed Nov 1, 2023
1 parent 87408a7 commit 502b843
Show file tree
Hide file tree
Showing 2 changed files with 122 additions and 3 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 *ContextInput
ConfigURL string
Env string
Vars Vars
Expand Down Expand Up @@ -184,8 +184,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 {
ctxJson, err := json.Marshal(params.Context)
if err != nil {
return "", err
}
args = append(args, "--context", string(ctxJson))
}
if params.ConfigURL != "" {
args = append(args, "--config", params.ConfigURL)
Expand Down
115 changes: 115 additions & 0 deletions atlasexec/atlas_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,121 @@ 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.ContextInput `json:"context"`
} `json:"input"`
}
}
)
token := "123456789"
handler := func(payloads *[]graphQLQuery) 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))
*payloads = append(*payloads, query)
if strings.Contains(query.Query, "pushDir") {
require.NoError(t, json.Unmarshal(query.Variables, &query.PushDir))
fmt.Fprint(w, `{"data":{"pushDir":{"url":"https://some-org.atlasgo.cloud/dirs/314159/tags/12345"}}}`)
}
}
}
var payloads []graphQLQuery
srv := httptest.NewServer(handler(&payloads))
t.Cleanup(srv.Close)
atlasConfigURL := generateHCL(t, token, srv)
c, err := atlasexec.NewClient(".", "atlas")
require.NoError(t, err)
inputContext := &atlasexec.ContextInput{
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{
ConfigURL: atlasConfigURL,
DevURL: "sqlite://file?mode=memory",
DirURL: "file://testdata/migrations",
Name: "test-dir-slug",
Env: "test",
}
t.Run("WithoutContext", func(t *testing.T) {
payloads = []graphQLQuery{}
got, err := c.MigratePush(context.Background(), params)
require.NoError(t, err)
require.NotEqual(t, "1234", got)
require.Len(t, payloads, 2)
p := &payloads[1]
require.Contains(t, p.Query, "syncDir")
err = json.Unmarshal(p.Variables, &p.SyncDir)
require.NoError(t, err)
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("WithContext", func(t *testing.T) {
payloads = []graphQLQuery{}
params.Context = inputContext
got, err := c.MigratePush(context.Background(), params)
require.NoError(t, err)
require.NotEqual(t, "1234", got)
require.Len(t, payloads, 2)
p := &payloads[1]
require.Contains(t, p.Query, "syncDir")
err = json.Unmarshal(p.Variables, &p.SyncDir)
require.NoError(t, err)
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)
require.Equal(t, inputContext, p.SyncDir.Input.Context)
})

})
t.Run("push", func(t *testing.T) {
payloads = []graphQLQuery{}
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.NotEqual(t, "1234", got)
require.Len(t, payloads, 2)
p := &payloads[1]
require.Contains(t, p.Query, "pushDir")
err = json.Unmarshal(p.Variables, &p.PushDir)
require.NoError(t, err)
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 502b843

Please sign in to comment.