feat: initial commit
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/FernandoVideira/LK_API_Temp/internal/store"
|
||||
"github.com/FernandoVideira/LK_API_Temp/internal/store/cache"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
func TestGetUser(t *testing.T) {
|
||||
withReddis := config{
|
||||
redisCfg: redisConfig{
|
||||
enabled: true,
|
||||
},
|
||||
}
|
||||
|
||||
api := newTestApi(t, withReddis)
|
||||
mux := api.mount()
|
||||
|
||||
testToken, err := api.authenticator.GenerateToken(nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
t.Run("should not allow unauthenticated requests", func(t *testing.T) {
|
||||
|
||||
mockStore := api.store.Users.(*store.MockUserStore)
|
||||
mockStore.On("GetByID", int64(1)).Return(nil, nil)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, "/v1/users/1", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
rr := executeRequest(req, mux)
|
||||
|
||||
assert.Equal(t, http.StatusUnauthorized, rr.Code, "should not allow unauthenticated requests")
|
||||
|
||||
mockStore.AssertNotCalled(t, "GetByID")
|
||||
|
||||
mockStore.Calls = nil // Reset the mock calls
|
||||
})
|
||||
|
||||
t.Run("should allow authenticated requests", func(t *testing.T) {
|
||||
mockCacheStore := api.cacheStore.Users.(*cache.MockUserStore)
|
||||
mockStore := api.store.Users.(*store.MockUserStore)
|
||||
|
||||
mockCacheStore.On("Get", int64(1)).Return(nil, nil)
|
||||
mockCacheStore.On("Set", mock.Anything, mock.Anything).Return(nil)
|
||||
|
||||
mockStore.On("GetByID", int64(1)).Return(&store.User{ID: 1}, nil)
|
||||
mockStore.On("GetByID", int64(42)).Return(nil, store.ErrNotFound)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, "/v1/users/1", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
req.Header.Set("Authorization", "Bearer "+testToken)
|
||||
rr := executeRequest(req, mux)
|
||||
|
||||
assert.Equal(t, http.StatusOK, rr.Code, "should allow authenticated requests")
|
||||
|
||||
mockStore.AssertNumberOfCalls(t, "GetByID", 2)
|
||||
|
||||
mockCacheStore.Calls = nil // Reset the mock calls
|
||||
})
|
||||
|
||||
t.Run("should hit the cache first and if not found add to cache", func(t *testing.T) {
|
||||
mockCacheStore := api.cacheStore.Users.(*cache.MockUserStore)
|
||||
|
||||
mockCacheStore.On("Get", int64(42)).Return(nil, nil)
|
||||
mockCacheStore.On("Get", int64(1)).Return(nil, nil)
|
||||
mockCacheStore.On("Set", mock.Anything, mock.Anything).Return(nil)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, "/v1/users/1", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
req.Header.Set("Authorization", "Bearer "+testToken)
|
||||
rr := executeRequest(req, mux)
|
||||
|
||||
assert.Equal(t, http.StatusOK, rr.Code, "should hit the cache first and if not found add to cache")
|
||||
|
||||
mockCacheStore.AssertNumberOfCalls(t, "Get", 2)
|
||||
|
||||
mockCacheStore.Calls = nil // Reset the mock calls
|
||||
})
|
||||
|
||||
t.Run("should not hit the cache if it is turned off", func(t *testing.T) {
|
||||
withReddis := config{
|
||||
redisCfg: redisConfig{
|
||||
enabled: false,
|
||||
},
|
||||
}
|
||||
|
||||
api := newTestApi(t, withReddis)
|
||||
mux := api.mount()
|
||||
|
||||
testToken, err := api.authenticator.GenerateToken(nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
mockCacheStore := api.cacheStore.Users.(*cache.MockUserStore)
|
||||
mockStore := api.store.Users.(*store.MockUserStore)
|
||||
|
||||
mockStore.On("GetByID", int64(1)).Return(nil, nil)
|
||||
|
||||
req, err := http.NewRequest(http.MethodGet, "/v1/users/1", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
req.Header.Set("Authorization", "Bearer "+testToken)
|
||||
rr := executeRequest(req, mux)
|
||||
|
||||
assert.Equal(t, http.StatusOK, rr.Code, "should not hit the cache if it is turned off")
|
||||
|
||||
mockCacheStore.AssertNotCalled(t, "Get")
|
||||
|
||||
mockCacheStore.Calls = nil // Reset the mock calls
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user