You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: create_test.go
    path of file: ./repos/graphql-engine/cli/seed
    
    the code of the file until where you have to start completion: package seed

import (
	"io/ioutil"
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/hasura/graphql-engine/cli/v2/internal/hasura/pgdump"
	"github.com/hasura/graphql-engine/cli/v2/internal/hasura/v1query"

	"github.com/hasura/graphql-engine/cli/v2/internal/testutil"

	"github.com/hasura/graphql-engine/cli/v2/internal/hasura"
)

func TestDriver_ExportDatadump(t *testing.T) {
	port, teardown := testutil.StartHasura(t, testutil.HasuraDockerImage)
	defer teardown()
	type fields struct {
		SendBulk     sendBulk
		PGDumpClient hasura.PGDump
	}
	type args struct {
		tableNames []string
		sourceName string
	}
	tests := []struct {
		name      string
		fields    fields
		args      args
		want      string
		wantErr   bool
		before    func(t *testing.T)
		assertErr require.ErrorAssertionFunc
	}{
		{
			"can export data dump",
			fields{
				func() sendBulk {
					c := testutil.NewHttpcClient(t, port, nil)
					return v1query.New(c, "v2/query").Bulk
				}(),
				func() hasura.PGDump {
					c := testutil.NewHttpcClient(t, port, nil)
					return pgdump.New(c, "v1alpha1/pg_dump")
				}(),
			},
			args{
				tableNames: []string{"articles", "authors"},
				sourceName: "default",
			},
			`S
    
func TestDriver_ExportDatadump(t *testing.T) {
	port, teardown := testutil.StartHasura(t, testutil.HasuraDockerImage)
	defer teardown()
	type fields struct {
		SendBulk     sendBulk
		PGDumpClient hasura.PGDump
	}
	type args struct {
		tableNames []string
		sourceName string
	}
	tests := []struct {
		name      string
		fields    fields
		args      args
		want      string
		wantErr   bool
		before    func(t *testing.T)
		assertErr require.ErrorAssertionFunc
	}{
		{
			"can export data dump",
			fields{
				func() sendBulk {
					c := testutil.NewHttpcClient(t, port, nil)
					return v1query.New(c, "v2/query").Bulk
				}(),
				func() hasura.PGDump {
					c := testutil.NewHttpcClient(t, port, nil)
					return pgdump.New(c, "v1alpha1/pg_dump")
				}(),
			},
			args{
				tableNames: []string{"articles", "authors"},
				sourceName: "default",
			},
			`SET check_function_bodies = false;
INSERT INTO public.articles (id, title, content, rating, author_id) VALUES (1, 'test1', 'test1', 1, 4);
INSERT INTO public.articles (id, title, content, rating, author_id) VALUES (2, 'test2', 'test1', 1, 4);
INSERT INTO public.articles (id, title, content, rating, author_id) VALUES (3, 'test3', 'test1', 1, 4);
INSERT INTO public.authors (id, name) VALUES (1, 'test1');
INSERT INTO public.authors (id, name) VALUES (4, 'test2');
SELECT pg_catalog.setval('public.articles_author_id_seq', 1, false);
SELECT pg_catalog.setval('public.articles_id_seq', 1, false);
SELECT pg_catalog.setval('public.authors_id_seq', 1, false);
`,
			false,
			func(t *testing.T) {
				c := testutil.NewHttpcClient(t, port, nil)
				q := v1query.New(c, "v2/query")
				b, err := ioutil.ReadFile("testdata/seeds/articles.sql")
				require.NoError(t, err)
				_, err = q.PGRunSQL(hasura.PGRunSQLInput{
					SQL: string(b),
				})
				require.NoError(t, err)
				b, err = ioutil.ReadFile("testdata/seeds/authors.sql")
				require.NoError(t, err)
				_, err = q.PGRunSQL(hasura.PGRunSQLInput{
					SQL: string(b),
				})
				require.NoError(t, err)
			},
			require.NoError,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			d := &Driver{
				SendBulk:     tt.fields.SendBulk,
				PGDumpClient: tt.fields.PGDumpClient,
			}
			if tt.before != nil {
				tt.before(t)
			}
			got, err := d.ExportDatadump(tt.args.tableNames, tt.args.sourceName)
			tt.assertErr(t, err)
			if tt.wantErr {
				return
			}
			gotb, err := ioutil.ReadAll(got)
			require.NoError(t, err)
			require.Equal(t, tt.want, string(gotb))
		})
	}
}