From 356647ed32e9d30c38d02bdae50f022985d4621c Mon Sep 17 00:00:00 2001 From: Kayhan Alizadeh Date: Thu, 16 Nov 2023 13:03:43 +0000 Subject: [PATCH] test: core database tests (#71) --- core/database/database.go | 4 +- core/database/database_test.go | 124 +++++++++++++++++++++++++++++++++ core/database/element.go | 2 +- core/database/types.go | 2 +- doc/model/model.md | 2 +- 5 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 core/database/database_test.go diff --git a/core/database/database.go b/core/database/database.go index 643cff1..1d73156 100644 --- a/core/database/database.go +++ b/core/database/database.go @@ -58,7 +58,7 @@ func (db *Database) DropSet(name string) string { func (db *Database) DropSubSet(set, subset string) string { _, ok := db.Sets[set][subset] if !ok { - return "SUBETNF" + return "SUBSETNF" } delete(db.Sets[set], subset) @@ -86,7 +86,7 @@ func (db *Database) CleanSet(name string) string { func (db *Database) CleanSubSet(set, subset string) string { _, ok := db.Sets[set][subset] if !ok { - return "SUBETNF" + return "SUBSETNF" } db.Sets[set][subset] = make(SubSet, 0) diff --git a/core/database/database_test.go b/core/database/database_test.go new file mode 100644 index 0000000..23ebb5a --- /dev/null +++ b/core/database/database_test.go @@ -0,0 +1,124 @@ +package database + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func TestDataBase(t *testing.T) { + db := Init("../../config/config.yaml") + + t.Run("addSetTest", func(t *testing.T) { + result := db.AddSet("testSet") + + assert.Equal(t, 1, len(db.Sets)) + assert.Equal(t, "DONE", result) + }) + + t.Run("AddSubSetTest", func(t *testing.T) { + db.AddSet("testSet") + result := db.AddSubSet("testSet", "testSubSet") + + assert.Equal(t, 0, len(db.Sets["testSet"]["testSubSet"])) + assert.Equal(t, "DONE", result) + + result = db.AddSubSet("testInvalidSet", "testSubSet") + + assert.Equal(t, "SETNF", result) + }) + + t.Run("pushElementTest", func(t *testing.T) { + db.AddSet("testSet") + db.AddSubSet("testSet", "testSubSet") + + time := time.Now() + result := db.PushElement("testSet", "testSubSet", Element{value: []byte("testValue"), time: time}) + + assert.Equal(t, "DONE", result) + assert.Equal(t, 1, len(db.Sets["testSet"]["testSubSet"])) + assert.Equal(t, []byte("testValue"), db.Sets["testSet"]["testSubSet"][0].value) + assert.Equal(t, time, db.Sets["testSet"]["testSubSet"][0].time) + + result = db.PushElement("invalidTestSet", "invalidTestSubSet", Element{value: []byte("testValue"), time: time}) + + assert.Equal(t, "SUBSETNF", result) + assert.Equal(t, 1, len(db.Sets["testSet"]["testSubSet"])) + assert.Equal(t, []byte("testValue"), db.Sets["testSet"]["testSubSet"][0].value) + assert.Equal(t, time, db.Sets["testSet"]["testSubSet"][0].time) + }) + + t.Run("dropSetTest", func(t *testing.T) { + db.AddSet("testSet") + db.AddSet("secondTestSet") + db.AddSet("thirdTestSet") + + result := db.DropSet("testSet") + + assert.Equal(t, 2, len(db.Sets)) + assert.Equal(t, "DONE", result) + + result = db.DropSet("inavlidTestSet") + + assert.Equal(t, "SETNF", result) + assert.Equal(t, 2, len(db.Sets)) + }) + + t.Run("dropSubSetTest", func(t *testing.T) { + db.AddSet("testSet") + db.AddSet("secondTestSet") + + db.AddSubSet("testSet", "subSetOne") + db.AddSubSet("testSet", "subSetTwo") + + result := db.DropSubSet("testSet", "subSetOne") + + assert.Equal(t, "DONE", result) + assert.Equal(t, 1, len(db.Sets["testSet"])) + assert.Nil(t, db.Sets["testSet"]["subSetOne"]) + + result = db.DropSubSet("secondTestSet", "subSetOne") + + assert.Equal(t, "SUBSETNF", result) + }) + + t.Run("cleanTest", func(t *testing.T) { + db.AddSet("testSet") + db.AddSet("secondTestSet") + db.AddSet("thirdTestSet") + + db.AddSubSet("testSet", "subSetOne") + db.AddSubSet("testSet", "subSetTwo") + + db.AddSubSet("secondTestSet", "subSetOne") + db.AddSubSet("secondTestSet", "subSetTwo") + + time := time.Now() + db.PushElement("testSet", "subSetOne", Element{value: []byte("testValue"), time: time}) + db.PushElement("testSet", "subSetTwo", Element{value: []byte("testValue"), time: time}) + + db.PushElement("secondTestSet", "subSetTwo", Element{value: []byte("testValue"), time: time}) + + result := db.CleanSubSet("secondTestSet", "subSetTwo") + + assert.Equal(t, "DONE", result) + assert.Equal(t, 0, len(db.Sets["secondTestSet"]["subSetTwo"])) + + result = db.CleanSet("testSet") + + assert.Equal(t, "DONE", result) + assert.Equal(t, 0, len(db.Sets["testSet"])) + + result = db.CleanSets() + + assert.Equal(t, "DONE", result) + assert.Equal(t, 0, len(db.Sets)) + + result = db.CleanSet("invalidSet") + assert.Equal(t, "SETNF", result) + + result = db.CleanSubSet("invalidSet", "invalidSubSet") + assert.Equal(t, "SUBSETNF", result) + }) +} diff --git a/core/database/element.go b/core/database/element.go index ad786e0..5b8785e 100644 --- a/core/database/element.go +++ b/core/database/element.go @@ -2,6 +2,6 @@ package database import "time" -func NewElement(v string) Element { +func NewElement(v []byte) Element { return Element{value: v, time: time.Now()} } diff --git a/core/database/types.go b/core/database/types.go index d18c818..fb19fb4 100644 --- a/core/database/types.go +++ b/core/database/types.go @@ -3,7 +3,7 @@ package database import "time" type Element struct { - value string + value []byte time time.Time } diff --git a/doc/model/model.md b/doc/model/model.md index 12e3fa0..e9a1f3d 100644 --- a/doc/model/model.md +++ b/doc/model/model.md @@ -14,7 +14,7 @@ Something like this: And this is how they look likes in code: ```go type Element struct { - value string + value []byte time time.Time } ```