Added EnsureTag function that finds or creates.
This commit is contained in:
+23
-2
@@ -139,8 +139,29 @@ func FindTag(key string, id string) (*Tag, error) {
|
||||
return tag, nil
|
||||
}
|
||||
|
||||
// ListTags finds all the tags, without filter. If it hits
|
||||
// the tag cache, it will copy it making it safe to modify
|
||||
// EnsureTag finds or creates a tag.
|
||||
func EnsureTag(tagType, tagName string) (*Tag, error) {
|
||||
// Try to find it first
|
||||
tag, err := FindTag("name", tagName)
|
||||
if err != nil && err.Error() != "not found" { // You saw nothing
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Failing that, make it
|
||||
if tag == nil {
|
||||
tag = new(Tag)
|
||||
tag.Type = tagType
|
||||
tag.Name = tagName
|
||||
err = tag.Insert()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return tag, nil
|
||||
}
|
||||
|
||||
// ListTags finds all the tags, without filter.
|
||||
func ListTags() ([]Tag, error) {
|
||||
db := server.Main.DB
|
||||
|
||||
|
||||
+31
-1
@@ -13,7 +13,7 @@ func TestTag(t *testing.T) {
|
||||
}
|
||||
|
||||
var testTag *Tag
|
||||
name := "Te'Eryvi"
|
||||
name := "Te'Eryvi (Test)"
|
||||
id := ""
|
||||
|
||||
t.Run("Insert", func(t *testing.T) {
|
||||
@@ -187,6 +187,36 @@ func TestTag(t *testing.T) {
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("EnsureTag", func(t *testing.T) {
|
||||
tag, err := EnsureTag("Character", "Renala T'Iavay (Test)")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = tag.Delete()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if tag.ID == testTag.ID {
|
||||
t.Error("Ensured tag matched old tag")
|
||||
return
|
||||
}
|
||||
|
||||
tag2, err := EnsureTag(testTag.Type, testTag.Name)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if tag2.ID != testTag.ID {
|
||||
t.Error("Second ensured tag did not match testTag")
|
||||
return
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Delete", func(t *testing.T) {
|
||||
if testTag == nil {
|
||||
t.Error("No tag to delete")
|
||||
|
||||
Reference in New Issue
Block a user