Skip to content
This repository has been archived by the owner on Oct 17, 2020. It is now read-only.

Added GetByAliases function in db and repository #539

Merged
merged 21 commits into from Mar 12, 2020
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
15 changes: 15 additions & 0 deletions backend/app/adapter/db/url.go
Expand Up @@ -96,6 +96,21 @@ WHERE "%s"=$1;`,
return url, nil
}

// GetByAliases finds URLs for a list of aliases
func (u URLSql) GetByAliases(aliases []string) ([]entity.URL, error) {
urls := make([]entity.URL, 0)
magicoder10 marked this conversation as resolved.
Show resolved Hide resolved

for _, alias := range aliases {
url, err := u.GetByAlias(alias)
magicoder10 marked this conversation as resolved.
Show resolved Hide resolved

if err != nil {
return urls, err
}
urls = append(urls, url)
}
return urls, nil
}

// NewURLSql creates URLSql
func NewURLSql(db *sql.DB) *URLSql {
return &URLSql{
Expand Down
111 changes: 111 additions & 0 deletions backend/app/adapter/db/url_integration_test.go
Expand Up @@ -242,6 +242,117 @@ func TestURLSql_Create(t *testing.T) {
}
}

func TestURLSql_GetByAliases(t *testing.T) {
twoYearsAgo := mustParseTime(t, "2017-05-01T08:02:16-07:00")
now := mustParseTime(t, "2019-05-01T08:02:16-07:00")

testCases := []struct {
name string
tableRows []urlTableRow
aliases []string
hasErr bool
expectedURLs []entity.URL
}{
{
name: "alias not found",
tableRows: []urlTableRow{},
aliases: []string{"220uFicCJj"},
hasErr: true,
},
{
name: "found url",
tableRows: []urlTableRow{
{
alias: "220uFicCJj",
longLink: "http://www.google.com",
createdAt: &twoYearsAgo,
expireAt: &now,
updatedAt: &now,
},
{
alias: "yDOBcj5HIPbUAsw",
longLink: "http://www.facebook.com",
createdAt: &twoYearsAgo,
expireAt: &now,
updatedAt: &now,
},
},
aliases: []string{"220uFicCJj", "yDOBcj5HIPbUAsw"},
hasErr: false,
expectedURLs: []entity.URL{
entity.URL{
Alias: "220uFicCJj",
OriginalURL: "http://www.google.com",
CreatedAt: &twoYearsAgo,
ExpireAt: &now,
UpdatedAt: &now,
},
entity.URL{
Alias: "yDOBcj5HIPbUAsw",
OriginalURL: "http://www.facebook.com",
CreatedAt: &twoYearsAgo,
ExpireAt: &now,
UpdatedAt: &now,
},
},
},
{
name: "nil time",
tableRows: []urlTableRow{
{
alias: "220uFicCJj",
longLink: "http://www.google.com",
createdAt: nil,
expireAt: nil,
updatedAt: nil,
},
{
alias: "yDOBcj5HIPbUAsw",
longLink: "http://www.facebook.com",
createdAt: &twoYearsAgo,
expireAt: &now,
updatedAt: &now,
},
},
aliases: []string{"220uFicCJj"},
hasErr: false,
expectedURLs: []entity.URL{
entity.URL{
Alias: "220uFicCJj",
OriginalURL: "http://www.google.com",
CreatedAt: nil,
ExpireAt: nil,
UpdatedAt: nil,
},
},
},
magicoder10 marked this conversation as resolved.
Show resolved Hide resolved
}

for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
mdtest.AccessTestDB(
dbConnector,
dbMigrationTool,
dbMigrationRoot,
dbConfig,
func(sqlDB *sql.DB) {
insertURLTableRows(t, sqlDB, testCase.tableRows)

urlRepo := db.NewURLSql(sqlDB)
urls, err := urlRepo.GetByAliases(testCase.aliases)

if testCase.hasErr {
mdtest.NotEqual(t, nil, err)
return
}
mdtest.Equal(t, nil, err)
mdtest.Equal(t, testCase.expectedURLs, urls)
},
)
})
}
}

func insertURLTableRows(t *testing.T, sqlDB *sql.DB, tableRows []urlTableRow) {
for _, tableRow := range tableRows {
_, err := sqlDB.Exec(
Expand Down
1 change: 1 addition & 0 deletions backend/app/usecase/repository/url.go
Expand Up @@ -7,4 +7,5 @@ type URL interface {
IsAliasExist(alias string) (bool, error)
GetByAlias(alias string) (entity.URL, error)
Create(url entity.URL) error
GetByAliases(aliases []string) ([]entity.URL, error)
}
15 changes: 15 additions & 0 deletions backend/app/usecase/repository/url_fake.go
Expand Up @@ -45,6 +45,21 @@ func (u URLFake) GetByAlias(alias string) (entity.URL, error) {
return url, nil
}

// GetByAliases finds all URL for a list of aliases
func (u URLFake) GetByAliases(aliases []string) ([]entity.URL, error) {
urls := make([]entity.URL, 0)

for _, alias := range aliases {
url, err := u.GetByAlias(alias)

if err != nil {
return urls, err
}
urls = append(urls, url)
}
return urls, nil
}

// NewURLFake creates in memory URL repository
func NewURLFake(urls map[string]entity.URL) URLFake {
return URLFake{
Expand Down