package models

import (
	"errors"
	"testing"
)

func TestRedisHGetOrCreateWithDefault(t *testing.T) {
	relayConfig := createRelayConfig(t)

	t.Run("Execute HGet when value exist", func(t *testing.T) {
		_, err := relayConfig.redisClient.HSet("gotest:redis:hget:or:create:with:default", "exist", "1").Result()
		if err != nil {
			t.Error(err)
		}

		value, err := redisHGetOrCreateWithDefault(relayConfig.redisClient, "gotest:redis:hget:or:create:with:default", "exist", "2")
		if err != nil {
			t.Error(err)
		}
		if value != "1" {
			t.Error(errors.New("value is override by redisHGetOrCreateWithDefault"))
		}

		_, err = relayConfig.redisClient.HDel("gotest:redis:hget:or:create:with:default", "exist").Result()
		if err != nil {
			t.Error(err)
		}
	})

	t.Run("Execute HGet when value not exist", func(t *testing.T) {
		_, err := redisHGetOrCreateWithDefault(relayConfig.redisClient, "gotest:redis:hget:or:create:with:default", "not_exist", "2")
		if err != nil {
			t.Error(err)
		}

		value, err := relayConfig.redisClient.HGet("gotest:redis:hget:or:create:with:default", "not_exist").Result()
		if err != nil {
			t.Error(err)
		}

		if value != "2" {
			t.Error(errors.New("redisHGetOrCreateWithDefault is not write default value successfully"))
		}

		_, err = relayConfig.redisClient.HDel("gotest:redis:hget:or:create:with:default", "not_exist").Result()
		if err != nil {
			t.Error(err)
		}
	})
}