graphql-engine/cli/commands/init_test.go
Vishnu Bharathi 0016d3cad5 cli: avoid exporting hasura-specific schemas during hasura init
fixes https://github.com/hasura/graphql-engine/issues/8352

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/4178
Co-authored-by: Aravind K P <8335904+scriptonist@users.noreply.github.com>
GitOrigin-RevId: eff7067c34932435207eff794f9435356b55b666
2022-04-25 13:06:52 +00:00

201 lines
6.6 KiB
Go

package commands
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"github.com/Pallinder/go-randomdata"
"github.com/hasura/graphql-engine/cli/v2/internal/testutil"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
. "github.com/onsi/gomega/gexec"
)
var _ = Describe("hasura init --endpoint (config v3)", func() {
var projectDirectory string
var teardown func()
var hgeEndpoint string
sourceName := randomdata.SillyName()
BeforeEach(func() {
projectDirectory = testutil.RandDirName()
hgeEndPort, teardownHGE := testutil.StartHasura(GinkgoT(), testutil.HasuraDockerImage)
hgeEndpoint = fmt.Sprintf("http://0.0.0.0:%s", hgeEndPort)
connectionString, teardownPG := testutil.StartPGContainer(GinkgoT())
testutil.AddPGSourceToHasura(GinkgoT(), hgeEndpoint, connectionString, sourceName)
copyTestConfigV3Project(projectDirectory)
editEndpointInConfig(filepath.Join(projectDirectory, defaultConfigFilename), hgeEndpoint)
editSourceNameInConfigV3ProjectTemplate(projectDirectory, "default", connectionString)
teardown = func() {
os.RemoveAll(projectDirectory)
teardownHGE()
teardownPG()
}
})
AfterEach(func() {
teardown()
})
It("should create version 3 metadata directory", func() {
err := os.RemoveAll(projectDirectory)
Expect(err).To(BeNil())
session := testutil.Hasura(testutil.CmdOpts{
Args: []string{"init", projectDirectory},
})
Eventually(session, timeout).Should(Exit(0))
wantKeywordList := []string{
fmt.Sprintf("cd %s", projectDirectory),
"hasura console",
}
for _, keyword := range wantKeywordList {
Expect(session.Err.Contents()).Should(ContainSubstring(keyword))
}
// check that required files are present
wantFilesList := []string{
filepath.Join(projectDirectory, "metadata", "databases", "databases.yaml"),
}
for _, file := range wantFilesList {
_, err := ioutil.ReadFile(file)
Expect(err).To(BeNil())
}
// check contents of metadata/version.yaml
gotMetadataVersion, err := ioutil.ReadFile(filepath.Join(projectDirectory, "metadata", "version.yaml"))
Expect(err).To(BeNil())
goldenMetadataVersion, err := ioutil.ReadFile("testdata/init_test/config-v3/metadata/version.golden.yaml")
Expect(err).To(BeNil())
Expect(gotMetadataVersion).Should(MatchYAML(goldenMetadataVersion))
})
It("should create directory with metadata and migrations from server", func() {
Context("create migrations and apply those on server", func() {
testMigrateApply(projectDirectory, []string{"--database-name", sourceName})
})
Context("test init --endpoint for config v3", func() {
err := os.RemoveAll(projectDirectory)
Expect(err).To(BeNil())
session := testutil.Hasura(testutil.CmdOpts{
Args: []string{"init", projectDirectory, "--endpoint", hgeEndpoint, "--fetch"},
})
wantKeywordList := []string{
fmt.Sprintf("cd %s", projectDirectory),
"hasura console",
"Metadata exported",
"migrations applied",
}
Eventually(session, timeout).Should(Exit(0))
for _, keyword := range wantKeywordList {
Expect(session.Err.Contents()).Should(ContainSubstring(keyword))
}
fileInfos, err := os.ReadDir(filepath.Join(projectDirectory, "migrations", sourceName))
Expect(err).To(BeNil())
Expect(len(fileInfos)).Should(BeEquivalentTo(1))
upMigrationsContent, err := ioutil.ReadFile(filepath.Join(projectDirectory, "migrations", sourceName, fileInfos[0].Name(), "up.sql"))
Expect(err).To(BeNil())
Expect(upMigrationsContent).ShouldNot(ContainSubstring("hdb_catalog"))
Expect(upMigrationsContent).ShouldNot(ContainSubstring("hdb_views"))
})
})
})
var _ = Describe("hasura init --endpoint (config v2)", func() {
var projectDirectory string
var teardown func()
var hgeEndpoint string
BeforeEach(func() {
projectDirectory = testutil.RandDirName()
hgeEndPort, teardownHGE := testutil.StartHasura(GinkgoT(), testutil.HasuraDockerImage)
hgeEndpoint = fmt.Sprintf("http://0.0.0.0:%s", hgeEndPort)
copyTestConfigV2Project(projectDirectory)
editEndpointInConfig(filepath.Join(projectDirectory, defaultConfigFilename), hgeEndpoint)
teardown = func() {
os.RemoveAll(projectDirectory)
teardownHGE()
}
})
AfterEach(func() {
teardown()
})
It("should create version 2 metadata directory", func() {
err := os.RemoveAll(projectDirectory)
Expect(err).To(BeNil())
session := testutil.Hasura(testutil.CmdOpts{
Args: []string{"init", projectDirectory, "--version", "2"},
})
Eventually(session, timeout).Should(Exit(0))
wantKeywordList := []string{
fmt.Sprintf("cd %s", projectDirectory),
"hasura console",
}
for _, keyword := range wantKeywordList {
Expect(session.Err.Contents()).Should(ContainSubstring(keyword))
}
// check that required files are present
wantFilesList := []string{
filepath.Join(projectDirectory, "metadata", "functions.yaml"),
filepath.Join(projectDirectory, "metadata", "tables.yaml"),
}
for _, file := range wantFilesList {
_, err := ioutil.ReadFile(file)
Expect(err).To(BeNil())
}
// check contents of metadata/version.yaml
gotMetadataVersion, err := ioutil.ReadFile(filepath.Join(projectDirectory, "metadata", "version.yaml"))
Expect(err).To(BeNil())
goldenMetadataVersion, err := ioutil.ReadFile("testdata/init_test/config-v2/metadata/version.golden.yaml")
Expect(err).To(BeNil())
Expect(gotMetadataVersion).Should(MatchYAML(goldenMetadataVersion))
})
It("should create directory with metadata and migrations from server", func() {
Context("create migrations and apply those on server", func() {
testMigrateApply(projectDirectory, nil)
})
Context("test init --endpoint for config v2", func() {
err := os.RemoveAll(projectDirectory)
Expect(err).To(BeNil())
session := testutil.Hasura(testutil.CmdOpts{
Args: []string{"init", projectDirectory, "--endpoint", hgeEndpoint, "--version", "2", "--fetch"},
})
wantKeywordList := []string{
fmt.Sprintf("cd %s", projectDirectory),
"hasura console",
"Metadata exported",
"migrations applied",
}
Eventually(session, timeout).Should(Exit(0))
for _, keyword := range wantKeywordList {
Expect(session.Err.Contents()).Should(ContainSubstring(keyword))
}
fileInfos, err := os.ReadDir(filepath.Join(projectDirectory, "migrations"))
Expect(err).To(BeNil())
Expect(len(fileInfos)).Should(BeEquivalentTo(1))
upMigrationsContent, err := ioutil.ReadFile(filepath.Join(projectDirectory, "migrations", fileInfos[0].Name(), "up.sql"))
Expect(err).To(BeNil())
Expect(string(upMigrationsContent)).ShouldNot(ContainSubstring("hdb_catalog"))
Expect(string(upMigrationsContent)).ShouldNot(ContainSubstring("hdb_views"))
})
})
})