11var DynamoDBFeatureStore = require ( '../dynamodb_feature_store' ) ;
22var helpers = require ( '../dynamodb_helpers' ) ;
33var testBase = require ( 'ldclient-node/test/feature_store_test_base' ) ;
4+ var dataKind = require ( 'ldclient-node/versioned_data_kind' ) ;
45var AWS = require ( 'aws-sdk' ) ;
56
7+ function stubLogger ( ) {
8+ return {
9+ debug : jest . fn ( ) ,
10+ info : jest . fn ( ) ,
11+ warn : jest . fn ( ) ,
12+ error : jest . fn ( )
13+ } ;
14+ }
15+
616describe ( 'DynamoDBFeatureStore' , function ( ) {
717
818 AWS . config . update ( {
@@ -13,7 +23,7 @@ describe('DynamoDBFeatureStore', function() {
1323
1424 var dynamodb = new AWS . DynamoDB ( ) ;
1525
16- var table = 'test-store' ;
26+ var table = 'test-store' ;
1727
1828 beforeAll ( function ( done ) {
1929 dynamodb . describeTable ( { TableName : table } , function ( err ) {
@@ -94,6 +104,10 @@ describe('DynamoDBFeatureStore', function() {
94104 return new DynamoDBFeatureStore ( table , { prefix : prefix , cacheTTL : 0 } ) ;
95105 }
96106
107+ function makeStoreWithDefaultPrefix ( ) {
108+ return makeStoreWithPrefix ( 'test' ) ;
109+ }
110+
97111 function makeStoreWithHook ( hook ) {
98112 var store = makeStore ( ) ;
99113 store . underlyingStore . testUpdateHook = hook ;
@@ -108,5 +122,78 @@ describe('DynamoDBFeatureStore', function() {
108122 testBase . baseFeatureStoreTests ( makeStoreWithoutCache , clearTable , false , makeStoreWithPrefix ) ;
109123 } ) ;
110124
125+ // We run the test suite again here because in the DynamoDB implementation, the prefix is entirely
126+ // omitted by default, so we want to make sure all the logic is correct with or without one.
127+ describe ( 'uncached with prefix' , function ( ) {
128+ testBase . baseFeatureStoreTests ( makeStoreWithDefaultPrefix , clearTable , false ) ;
129+ } ) ;
130+
111131 testBase . concurrentModificationTests ( makeStore , makeStoreWithHook ) ;
132+
133+ describe ( 'handling errors from DynamoDB client' , function ( ) {
134+ var err = new Error ( 'error' ) ;
135+ var client ;
136+ var logger ;
137+ var store ;
138+
139+ beforeEach ( ( ) => {
140+ client = { } ;
141+ logger = stubLogger ( ) ;
142+ store = new DynamoDBFeatureStore ( table , { dynamoDBClient : client , logger : logger } ) ;
143+ } ) ;
144+
145+ it ( 'error from query in init' , done => {
146+ var data = { features : { flag : { key : 'flag' , version : 1 } } } ;
147+ client . query = ( params , cb ) => cb ( err ) ;
148+ store . init ( data , function ( ) {
149+ expect ( logger . error ) . toHaveBeenCalled ( ) ;
150+ done ( ) ;
151+ } ) ;
152+ } ) ;
153+
154+ it ( 'error from batchWrite in init' , done => {
155+ var data = { features : { flag : { key : 'flag' , version : 1 } } } ;
156+ client . query = ( params , cb ) => cb ( null , { Items : [ ] } ) ;
157+ client . batchWrite = ( params , cb ) => cb ( err ) ;
158+ store . init ( data , function ( ) {
159+ expect ( logger . error ) . toHaveBeenCalled ( ) ;
160+ done ( ) ;
161+ } ) ;
162+ } ) ;
163+
164+ it ( 'error from get' , done => {
165+ client . get = ( params , cb ) => cb ( err ) ;
166+ store . get ( dataKind . features , 'flag' , function ( result ) {
167+ expect ( result ) . toBe ( null ) ;
168+ expect ( logger . error ) . toHaveBeenCalled ( ) ;
169+ done ( ) ;
170+ } ) ;
171+ } ) ;
172+
173+ it ( 'error from get all' , done => {
174+ client . query = ( params , cb ) => cb ( err ) ;
175+ store . all ( dataKind . features , function ( result ) {
176+ expect ( result ) . toBe ( null ) ;
177+ expect ( logger . error ) . toHaveBeenCalled ( ) ;
178+ done ( ) ;
179+ } ) ;
180+ } ) ;
181+
182+ it ( 'error from upsert' , done => {
183+ client . put = ( params , cb ) => cb ( err ) ;
184+ store . upsert ( dataKind . features , { key : 'flag' , version : 1 } , function ( ) {
185+ expect ( logger . error ) . toHaveBeenCalled ( ) ;
186+ done ( ) ;
187+ } ) ;
188+ } ) ;
189+
190+ it ( 'error from initialized' , done => {
191+ client . get = ( params , cb ) => cb ( err ) ;
192+ store . initialized ( function ( result ) {
193+ expect ( result ) . toBe ( false ) ;
194+ expect ( logger . error ) . toHaveBeenCalled ( ) ;
195+ done ( ) ;
196+ } ) ;
197+ } ) ;
198+ } ) ;
112199} ) ;
0 commit comments