From 139d9f2fb3d0c9eb558bc9ca95d3333ec0a4e1e2 Mon Sep 17 00:00:00 2001
From: thijsheijden <hi@thijsheijden.nl>
Date: Mon, 19 Apr 2021 18:56:51 +0200
Subject: [PATCH] Added mock key value store

Also changed around some of the naming.
---
 internal/drivers/keyvaluedriver/interface.go  |  4 ++--
 .../{redisdriver.go => keyvaluedriver.go}     | 14 +++++------
 .../keyvaluedriver/mock/mockkeyvaluedriver.go | 24 +++++++++++++++++++
 3 files changed, 33 insertions(+), 9 deletions(-)
 rename internal/drivers/keyvaluedriver/{redisdriver.go => keyvaluedriver.go} (74%)
 create mode 100644 internal/drivers/keyvaluedriver/mock/mockkeyvaluedriver.go

diff --git a/internal/drivers/keyvaluedriver/interface.go b/internal/drivers/keyvaluedriver/interface.go
index ad465b3..14990a9 100644
--- a/internal/drivers/keyvaluedriver/interface.go
+++ b/internal/drivers/keyvaluedriver/interface.go
@@ -1,7 +1,7 @@
 package keyvaluedriver
 
-// KeyValueStore is an interface for a key value storage
-type KeyValueStore interface {
+// KeyValueStoreInterface is an interface for a key value storage
+type KeyValueStoreInterface interface {
 	Get(key *string) *string
 	Set(key *string, value interface{}) error
 }
diff --git a/internal/drivers/keyvaluedriver/redisdriver.go b/internal/drivers/keyvaluedriver/keyvaluedriver.go
similarity index 74%
rename from internal/drivers/keyvaluedriver/redisdriver.go
rename to internal/drivers/keyvaluedriver/keyvaluedriver.go
index c3420dd..3624612 100644
--- a/internal/drivers/keyvaluedriver/redisdriver.go
+++ b/internal/drivers/keyvaluedriver/keyvaluedriver.go
@@ -9,18 +9,18 @@ import (
 	"github.com/go-redis/redis/v8"
 )
 
-// RedisDriver models the redis driver
-type RedisDriver struct {
+// KeyValueDriver models the redis driver
+type KeyValueDriver struct {
 	client *redis.Client
 }
 
 // NewRedisDriver creates and returns a redis driver
-func NewRedisDriver() *RedisDriver {
-	return &RedisDriver{}
+func NewRedisDriver() *KeyValueDriver {
+	return &KeyValueDriver{}
 }
 
 // Start starts the redis driver
-func (d *RedisDriver) Start() {
+func (d *KeyValueDriver) Start() {
 	// Grab the redis host and port from environment vars
 	redisAddress := os.Getenv("REDIS_ADDRESS")
 	// redisPassword := os.Getenv("REDIS_PASSWORD")
@@ -35,13 +35,13 @@ func (d *RedisDriver) Start() {
 }
 
 // Get retrieves the value from the redis store that belongs to the given key
-func (d *RedisDriver) Get(key *string) *string {
+func (d *KeyValueDriver) Get(key *string) *string {
 	value := d.client.Get(context.Background(), *key).Val()
 	return &value
 }
 
 // Set sets the key value pair in the redis store
-func (d *RedisDriver) Set(key *string, value interface{}) error {
+func (d *KeyValueDriver) Set(key *string, value interface{}) error {
 	status := d.client.Set(context.Background(), *key, value, 0)
 	return status.Err()
 }
diff --git a/internal/drivers/keyvaluedriver/mock/mockkeyvaluedriver.go b/internal/drivers/keyvaluedriver/mock/mockkeyvaluedriver.go
new file mode 100644
index 0000000..52f38c4
--- /dev/null
+++ b/internal/drivers/keyvaluedriver/mock/mockkeyvaluedriver.go
@@ -0,0 +1,24 @@
+package mockkeyvaluedriver
+
+// A KeyValueStore implements methods to set key-value data (mock)
+type KeyValueStore struct {
+	data map[string]interface{}
+}
+
+// CreateKeyValueStore creates a key value store driver (mock)
+func CreateKeyValueStore() *KeyValueStore {
+	return &KeyValueStore{
+		data: make(map[string]interface{}),
+	}
+}
+
+// Set sets a key to a value in the key value store. Expects a non-pointer as value. (mock)
+func (kvs *KeyValueStore) Set(key *string, value interface{}) error {
+	kvs.data[*key] = value
+	return nil
+}
+
+// Get gets the value for the supplied key from the key value store (mock)
+func (kvs *KeyValueStore) Get(key *string) interface{} {
+	return kvs.data[*key]
+}
-- 
GitLab