(bug) - remove unique index on template name (#3226)
* (bug) - remove unique index on template names
This commit is contained in:
parent
0fcf2536d2
commit
f7a3c375a2
6 changed files with 141 additions and 2 deletions
|
@ -48,6 +48,7 @@ func Connect() (*db.DB, error) {
|
||||||
func Reset(d *db.DB) {
|
func Reset(d *db.DB) {
|
||||||
d.Lock(func(tx db.Execer, _ db.Binder) error {
|
d.Lock(func(tx db.Execer, _ db.Binder) error {
|
||||||
tx.Exec("DELETE FROM cron")
|
tx.Exec("DELETE FROM cron")
|
||||||
|
tx.Exec("DELETE FROM cards")
|
||||||
tx.Exec("DELETE FROM logs")
|
tx.Exec("DELETE FROM logs")
|
||||||
tx.Exec("DELETE FROM steps")
|
tx.Exec("DELETE FROM steps")
|
||||||
tx.Exec("DELETE FROM stages")
|
tx.Exec("DELETE FROM stages")
|
||||||
|
@ -56,6 +57,7 @@ func Reset(d *db.DB) {
|
||||||
tx.Exec("DELETE FROM perms")
|
tx.Exec("DELETE FROM perms")
|
||||||
tx.Exec("DELETE FROM repos")
|
tx.Exec("DELETE FROM repos")
|
||||||
tx.Exec("DELETE FROM users")
|
tx.Exec("DELETE FROM users")
|
||||||
|
tx.Exec("DELETE FROM templates")
|
||||||
tx.Exec("DELETE FROM orgsecrets")
|
tx.Exec("DELETE FROM orgsecrets")
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
|
@ -196,6 +196,10 @@ var migrations = []struct {
|
||||||
name: "create-new-table-cards",
|
name: "create-new-table-cards",
|
||||||
stmt: createNewTableCards,
|
stmt: createNewTableCards,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "amend-table-templates",
|
||||||
|
stmt: amendTableTemplates,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Migrate performs the database migration. If the migration fails
|
// Migrate performs the database migration. If the migration fails
|
||||||
|
@ -763,3 +767,12 @@ CREATE TABLE IF NOT EXISTS cards
|
||||||
FOREIGN KEY (card_id) REFERENCES steps (step_id) ON DELETE CASCADE
|
FOREIGN KEY (card_id) REFERENCES steps (step_id) ON DELETE CASCADE
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
|
//
|
||||||
|
// 020_amend_table_templates.sql
|
||||||
|
//
|
||||||
|
|
||||||
|
var amendTableTemplates = `
|
||||||
|
ALTER TABLE templates
|
||||||
|
DROP CONSTRAINT templates_template_name_key;
|
||||||
|
`
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
-- name: amend-table-templates
|
||||||
|
|
||||||
|
ALTER TABLE templates
|
||||||
|
DROP CONSTRAINT templates_template_name_key;
|
|
@ -196,6 +196,10 @@ var migrations = []struct {
|
||||||
name: "create-new-table-cards",
|
name: "create-new-table-cards",
|
||||||
stmt: createNewTableCards,
|
stmt: createNewTableCards,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "amend-templates-table",
|
||||||
|
stmt: amendTemplatesTable,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Migrate performs the database migration. If the migration fails
|
// Migrate performs the database migration. If the migration fails
|
||||||
|
@ -765,3 +769,36 @@ CREATE TABLE IF NOT EXISTS cards
|
||||||
FOREIGN KEY (card_id) REFERENCES steps (step_id) ON DELETE CASCADE
|
FOREIGN KEY (card_id) REFERENCES steps (step_id) ON DELETE CASCADE
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
|
||||||
|
//
|
||||||
|
// 019_amend_table_templates.sql
|
||||||
|
//
|
||||||
|
|
||||||
|
var amendTemplatesTable = `
|
||||||
|
PRAGMA foreign_keys=off;
|
||||||
|
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
|
ALTER TABLE templates RENAME TO _templates_old;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS templates (
|
||||||
|
template_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
|
,template_name TEXT
|
||||||
|
,template_namespace TEXT COLLATE NOCASE
|
||||||
|
,template_data BLOB
|
||||||
|
,template_created INTEGER
|
||||||
|
,template_updated INTEGER
|
||||||
|
,UNIQUE(template_name, template_namespace)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO templates (template_id, template_name, template_namespace, template_data, template_created, template_updated)
|
||||||
|
SELECT template_id, template_name, template_namespace, template_data, template_created, template_updated
|
||||||
|
FROM _templates_old;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS ix_template_namespace ON templates (template_namespace);
|
||||||
|
DROP TABLE _templates_old;
|
||||||
|
|
||||||
|
PRAGMA foreign_keys=on;
|
||||||
|
`
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
-- name: amend-templates-table
|
||||||
|
|
||||||
|
PRAGMA foreign_keys=off;
|
||||||
|
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
|
ALTER TABLE templates RENAME TO _templates_old;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS templates (
|
||||||
|
template_id INTEGER PRIMARY KEY AUTOINCREMENT
|
||||||
|
,template_name TEXT
|
||||||
|
,template_namespace TEXT COLLATE NOCASE
|
||||||
|
,template_data BLOB
|
||||||
|
,template_created INTEGER
|
||||||
|
,template_updated INTEGER
|
||||||
|
,UNIQUE(template_name, template_namespace)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO templates (template_id, template_name, template_namespace, template_data, template_created, template_updated)
|
||||||
|
SELECT template_id, template_name, template_namespace, template_data, template_created, template_updated
|
||||||
|
FROM _templates_old;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS ix_template_namespace ON templates (template_namespace);
|
||||||
|
DROP TABLE _templates_old;
|
||||||
|
|
||||||
|
PRAGMA foreign_keys=on;
|
|
@ -2,6 +2,7 @@
|
||||||
// Use of this source code is governed by the Drone Non-Commercial License
|
// Use of this source code is governed by the Drone Non-Commercial License
|
||||||
// that can be found in the LICENSE file.
|
// that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !oss
|
||||||
// +build !oss
|
// +build !oss
|
||||||
|
|
||||||
package template
|
package template
|
||||||
|
@ -29,7 +30,7 @@ func TestTemplate(t *testing.T) {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
store := New(conn).(*templateStore)
|
store := New(conn).(*templateStore)
|
||||||
t.Run("Create", testTemplateCreate(store))
|
t.Run("TestTemplates", testTemplateCreate(store))
|
||||||
}
|
}
|
||||||
|
|
||||||
func testTemplateCreate(store *templateStore) func(t *testing.T) {
|
func testTemplateCreate(store *templateStore) func(t *testing.T) {
|
||||||
|
@ -50,6 +51,8 @@ func testTemplateCreate(store *templateStore) func(t *testing.T) {
|
||||||
t.Errorf("Want template Id assigned, got %d", item.Id)
|
t.Errorf("Want template Id assigned, got %d", item.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t.Run("CreateSameNameDiffOrg", testCreateWithSameNameDiffOrg(store))
|
||||||
|
t.Run("CreateSameNameSameOrgShouldError", testCreateSameNameSameOrgShouldError(store))
|
||||||
t.Run("Find", testTemplateFind(store, item))
|
t.Run("Find", testTemplateFind(store, item))
|
||||||
t.Run("FindName", testTemplateFindName(store))
|
t.Run("FindName", testTemplateFindName(store))
|
||||||
t.Run("ListAll", testTemplateListAll(store))
|
t.Run("ListAll", testTemplateListAll(store))
|
||||||
|
@ -59,6 +62,43 @@ func testTemplateCreate(store *templateStore) func(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testCreateWithSameNameDiffOrg(store *templateStore) func(t *testing.T) {
|
||||||
|
return func(t *testing.T) {
|
||||||
|
item := &core.Template{
|
||||||
|
Id: 1,
|
||||||
|
Name: "my_template",
|
||||||
|
Namespace: "my_org2",
|
||||||
|
Data: "some_template_data",
|
||||||
|
Created: 1,
|
||||||
|
Updated: 2,
|
||||||
|
}
|
||||||
|
err := store.Create(noContext, item)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
if item.Id == 0 {
|
||||||
|
t.Errorf("Want template Id assigned, got %d", item.Id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCreateSameNameSameOrgShouldError(store *templateStore) func(t *testing.T) {
|
||||||
|
return func(t *testing.T) {
|
||||||
|
item := &core.Template{
|
||||||
|
Id: 3,
|
||||||
|
Name: "my_template",
|
||||||
|
Namespace: "my_org2",
|
||||||
|
Data: "some_template_data",
|
||||||
|
Created: 1,
|
||||||
|
Updated: 2,
|
||||||
|
}
|
||||||
|
err := store.Create(noContext, item)
|
||||||
|
if err == nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func testTemplateFind(store *templateStore, template *core.Template) func(t *testing.T) {
|
func testTemplateFind(store *templateStore, template *core.Template) func(t *testing.T) {
|
||||||
return func(t *testing.T) {
|
return func(t *testing.T) {
|
||||||
item, err := store.Find(noContext, template.Id)
|
item, err := store.Find(noContext, template.Id)
|
||||||
|
@ -95,6 +135,20 @@ func testTemplate(item *core.Template) func(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testTemplate2(item *core.Template) func(t *testing.T) {
|
||||||
|
return func(t *testing.T) {
|
||||||
|
if got, want := item.Name, "my_template"; got != want {
|
||||||
|
t.Errorf("Want template name %q, got %q", want, got)
|
||||||
|
}
|
||||||
|
if got, want := item.Data, "some_template_data"; got != want {
|
||||||
|
t.Errorf("Want template data %q, got %q", want, got)
|
||||||
|
}
|
||||||
|
if got, want := item.Namespace, "my_org2"; got != want {
|
||||||
|
t.Errorf("Want template org %q, got %q", want, got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func testTemplateListAll(store *templateStore) func(t *testing.T) {
|
func testTemplateListAll(store *templateStore) func(t *testing.T) {
|
||||||
return func(t *testing.T) {
|
return func(t *testing.T) {
|
||||||
list, err := store.ListAll(noContext)
|
list, err := store.ListAll(noContext)
|
||||||
|
@ -102,10 +156,11 @@ func testTemplateListAll(store *templateStore) func(t *testing.T) {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if got, want := len(list), 1; got != want {
|
if got, want := len(list), 2; got != want {
|
||||||
t.Errorf("Want count %d, got %d", want, got)
|
t.Errorf("Want count %d, got %d", want, got)
|
||||||
} else {
|
} else {
|
||||||
t.Run("Fields", testTemplate(list[0]))
|
t.Run("Fields", testTemplate(list[0]))
|
||||||
|
t.Run("Fields", testTemplate2(list[1]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue