|
1 | 1 | package api
|
2 | 2 |
|
3 | 3 | import (
|
4 |
| - "os" |
| 4 | + "database/sql" |
5 | 5 | "testing"
|
6 | 6 | "time"
|
7 | 7 |
|
8 |
| - "github.com/Dobefu/csb/cmd/database" |
| 8 | + "github.com/DATA-DOG/go-sqlmock" |
9 | 9 | "github.com/Dobefu/csb/cmd/database/query"
|
10 | 10 | db_structs "github.com/Dobefu/csb/cmd/database/structs"
|
11 |
| - "github.com/Dobefu/csb/cmd/init_env" |
12 |
| - "github.com/Dobefu/csb/cmd/migrate_db" |
| 11 | + |
| 12 | + "github.com/Dobefu/csb/cmd/cs_sdk/structs" |
13 | 13 | "github.com/stretchr/testify/assert"
|
14 | 14 | )
|
15 | 15 |
|
16 |
| -func TestGetChildEntriesByUid(t *testing.T) { |
17 |
| - init_env.Main("../../.env.test") |
18 |
| - err := database.Connect() |
19 |
| - assert.Equal(t, nil, err) |
| 16 | +func setupGetChildEntriesTest(t *testing.T) (sqlmock.Sqlmock, func()) { |
| 17 | + db, mock, err := sqlmock.New() |
| 18 | + assert.NoError(t, err) |
| 19 | + |
| 20 | + queryQueryRows = func(table string, fields []string, where []db_structs.QueryWhere) (*sql.Rows, error) { |
| 21 | + return db.Query("SELECT (.+) FROM routes", nil) |
| 22 | + } |
20 | 23 |
|
21 |
| - err = migrate_db.Main(true) |
22 |
| - assert.Equal(t, nil, err) |
| 24 | + return mock, func() { |
| 25 | + db.Close() |
| 26 | + queryQueryRows = query.QueryRows |
| 27 | + } |
| 28 | +} |
23 | 29 |
|
24 |
| - oldDb := os.Getenv("DB_CONN") |
25 |
| - os.Setenv("DB_CONN", "file:/") |
26 |
| - err = database.Connect() |
27 |
| - assert.Equal(t, nil, err) |
| 30 | +func TestGetChildEntriesByUidSuccess(t *testing.T) { |
| 31 | + mock, cleanup := setupGetChildEntriesTest(t) |
| 32 | + defer cleanup() |
28 | 33 |
|
29 |
| - _, err = GetChildEntriesByUid("", "", false) |
30 |
| - assert.NotEqual(t, nil, err) |
| 34 | + cols := []string{"id", "uid", "content_type", "locale", "slug", "url", "parent", "updated_at", "exclude_sitemap", "published"} |
| 35 | + mock.ExpectQuery("SELECT (.+) FROM routes").WillReturnRows( |
| 36 | + sqlmock.NewRows(cols).AddRow("id", "uid", "content_type", "locale", "slug", "url", "parent", time.Time{}, true, true), |
| 37 | + ) |
31 | 38 |
|
32 |
| - os.Setenv("DB_CONN", oldDb) |
33 |
| - err = database.Connect() |
34 |
| - assert.Equal(t, nil, err) |
| 39 | + routes, err := GetChildEntriesByUid("uid", "en", false) |
| 40 | + assert.NoError(t, err) |
| 41 | + assert.Equal(t, []structs.Route{{ |
| 42 | + Id: "id", |
| 43 | + Uid: "uid", |
| 44 | + Title: "", |
| 45 | + ContentType: "content_type", |
| 46 | + Locale: "locale", |
| 47 | + Slug: "slug", |
| 48 | + Url: "url", |
| 49 | + Parent: "parent", |
| 50 | + Version: 0, |
| 51 | + UpdatedAt: time.Time{}, |
| 52 | + ExcludeSitemap: true, |
| 53 | + Published: true, |
| 54 | + }}, routes) |
| 55 | + assert.NoError(t, mock.ExpectationsWereMet()) |
| 56 | +} |
35 | 57 |
|
36 |
| - err = insertPage("testingen", "testing", "parent_uid") |
37 |
| - assert.Equal(t, nil, err) |
| 58 | +func TestGetChildEntriesByUidErrQuery(t *testing.T) { |
| 59 | + mock, cleanup := setupGetChildEntriesTest(t) |
| 60 | + defer cleanup() |
38 | 61 |
|
39 |
| - err = insertPage("parent_uiden", "parent_uid", "") |
40 |
| - assert.Equal(t, nil, err) |
| 62 | + mock.ExpectQuery("SELECT (.+) FROM routes").WillReturnError(sql.ErrNoRows) |
41 | 63 |
|
42 |
| - _, err = GetChildEntriesByUid("parent_uid", "en", true) |
43 |
| - assert.Equal(t, nil, err) |
| 64 | + routes, err := GetChildEntriesByUid("uid", "en", false) |
| 65 | + assert.EqualError(t, err, sql.ErrNoRows.Error()) |
| 66 | + assert.Equal(t, []structs.Route([]structs.Route{}), routes) |
| 67 | + assert.NoError(t, mock.ExpectationsWereMet()) |
44 | 68 | }
|
45 | 69 |
|
46 |
| -func insertPage(id string, uid string, parent string) error { |
47 |
| - return query.Insert("routes", []db_structs.QueryValue{ |
48 |
| - { |
49 |
| - Name: "id", |
50 |
| - Value: id, |
51 |
| - }, |
52 |
| - { |
53 |
| - Name: "uid", |
54 |
| - Value: uid, |
55 |
| - }, |
56 |
| - { |
57 |
| - Name: "title", |
58 |
| - Value: "Title", |
59 |
| - }, |
60 |
| - { |
61 |
| - Name: "content_type", |
62 |
| - Value: "basic_page", |
63 |
| - }, |
64 |
| - { |
65 |
| - Name: "locale", |
66 |
| - Value: "en", |
67 |
| - }, |
68 |
| - { |
69 |
| - Name: "slug", |
70 |
| - Value: "/testing", |
71 |
| - }, |
72 |
| - { |
73 |
| - Name: "url", |
74 |
| - Value: "/testing", |
75 |
| - }, |
76 |
| - { |
77 |
| - Name: "parent", |
78 |
| - Value: parent, |
79 |
| - }, |
80 |
| - { |
81 |
| - Name: "updated_at", |
82 |
| - Value: time.Now(), |
83 |
| - }, |
84 |
| - }) |
| 70 | +func TestGetChildEntriesByUidErrScan(t *testing.T) { |
| 71 | + mock, cleanup := setupGetChildEntriesTest(t) |
| 72 | + defer cleanup() |
| 73 | + |
| 74 | + cols := []string{"locacle"} |
| 75 | + mock.ExpectQuery("SELECT (.+) FROM routes").WillReturnRows( |
| 76 | + sqlmock.NewRows(cols).AddRow("locale"), |
| 77 | + ) |
| 78 | + |
| 79 | + routes, err := GetChildEntriesByUid("uid", "en", false) |
| 80 | + assert.NoError(t, err) |
| 81 | + assert.Equal(t, []structs.Route([]structs.Route(nil)), routes) |
| 82 | + assert.NoError(t, mock.ExpectationsWereMet()) |
85 | 83 | }
|
0 commit comments