コード例 #1
0
        public void Upsert_DifferentCas_CasMismatch()
        {
            // Arrange

            var existingObject = new object();
            var bucket         = new MockBucket
            {
                { "key", existingObject }
            };

            Assert.True(bucket.TryGetMock("key", out var mockDocument));
            var originalCas = mockDocument.Cas;

            // Act

            var result = bucket.Upsert("key", new object(), originalCas - 1);

            // Assert

            Assert.False(result.Success);
            Assert.Equal(ResponseStatus.DocumentMutationDetected, result.Status);

            Assert.True(bucket.TryGetMock("key", out mockDocument));
            Assert.Equal(existingObject, mockDocument?.Content);
        }
コード例 #2
0
        public void Touch_ExistingDocWithExpiration_SetsExpiration()
        {
            // Arrange

            var clockProvider = new LambdaClockProvider(() => new DateTime(2000, 1, 1));

            var bucket = new MockBucket(clockProvider)
            {
                { "key", new MockDocument
                  {
                      Cas        = 100,
                      Content    = new object(),
                      Expiration = new DateTime(2000, 1, 2)
                  } }
            };

            // Act

            var result = bucket.Touch("key", TimeSpan.FromMinutes(1));

            // Assert

            Assert.True(result.Success);
            Assert.Equal(ResponseStatus.Success, result.Status);

            Assert.True(bucket.TryGetMock("key", out var mockDocument));
            Assert.NotNull(mockDocument.Expiration);
            Assert.Equal(clockProvider.GetCurrentDateTime().AddMinutes(1), mockDocument.Expiration.Value);
        }
コード例 #3
0
        public void Touch_ExistingDocNoExpiration_RemovesExpiration()
        {
            // Arrange

            var clockProvider = new LambdaClockProvider(() => new DateTime(2000, 1, 1));

            var bucket = new MockBucket(clockProvider)
            {
                { "key", new MockDocument
                  {
                      Cas        = 100,
                      Content    = new object(),
                      Expiration = new DateTime(2000, 1, 2)
                  } }
            };

            // Act

            var result = bucket.Touch("key", TimeSpan.Zero);

            // Assert

            Assert.True(result.Success);
            Assert.Equal(ResponseStatus.Success, result.Status);

            Assert.True(bucket.TryGetMock("key", out var mockDocument));
            Assert.Null(mockDocument.Expiration);
        }
コード例 #4
0
        public void Replace_NewDoc_KeyNotFound()
        {
            // Arrange

            var bucket = new MockBucket();

            // Act

            var result = bucket.Replace("key", new object());

            // Assert

            Assert.False(result.Success);
            Assert.Equal(ResponseStatus.KeyNotFound, result.Status);
        }
コード例 #5
0
        public void Insert_NewDoc_Success()
        {
            // Arrange

            var bucket = new MockBucket();

            // Act

            var result = bucket.Insert("key", new object());

            // Assert

            Assert.True(result.Success);
            Assert.Equal(ResponseStatus.Success, result.Status);

            Assert.True(bucket.ContainsMock("key"));
        }
コード例 #6
0
        public void Get_MissingDoc_KeyNotFound(IEnumerable <KeyValuePair <string, MockDocument> > documents)
        {
            // Arrange

            // Will ensure sample doc above on 1/1/2000 is expired
            var clockProvider = new LambdaClockProvider(() => new DateTime(2000, 1, 2));

            var bucket = new MockBucket(clockProvider);

            bucket.AddRange(documents);

            // Act

            var result = bucket.Get <object>("key");

            // Assert

            Assert.False(result.Success);
            Assert.Equal(ResponseStatus.KeyNotFound, result.Status);
        }
コード例 #7
0
        public void Remove_ExistingDoc_Removes()
        {
            // Arrange

            var bucket = new MockBucket
            {
                { "key", new object() }
            };

            // Act

            var result = bucket.Remove("key");

            // Assert

            Assert.True(result.Success);
            Assert.Equal(ResponseStatus.Success, result.Status);

            Assert.False(bucket.TryGetMock("key", out _));
        }
コード例 #8
0
        public void Upsert_ExistingDoc_IncrementsCas()
        {
            // Arrange

            var bucket = new MockBucket
            {
                { "key", new object() }
            };

            Assert.True(bucket.TryGetMock("key", out var mockDocument));
            var originalCas = mockDocument.Cas;

            // Act

            bucket.Upsert("key", new object());

            // Assert

            Assert.True(bucket.TryGetMock("key", out mockDocument));
            Assert.True(mockDocument.Cas > originalCas);
        }
コード例 #9
0
        public void Get_ExistingDoc_ReturnsDoc()
        {
            // Arrange

            var existingObject = new object();
            var bucket         = new MockBucket
            {
                { "key", existingObject }
            };

            // Act

            var result = bucket.Get <object>("key");

            // Assert

            Assert.True(result.Success);
            Assert.Equal(ResponseStatus.Success, result.Status);

            Assert.True(bucket.TryGetMock("key", out var mockDocument));
            Assert.Equal(existingObject, mockDocument?.Content);
        }
コード例 #10
0
        public void Insert_ExistingDoc_KeyExists()
        {
            // Arrange

            var existingObject = new object();
            var bucket         = new MockBucket
            {
                { "key", existingObject }
            };

            // Act

            var result = bucket.Insert("key", new object());

            // Assert

            Assert.False(result.Success);
            Assert.Equal(ResponseStatus.KeyExists, result.Status);

            Assert.True(bucket.TryGetMock("key", out var mockDocument));
            Assert.Equal(existingObject, mockDocument?.Content);
        }
コード例 #11
0
        public void Upsert_ExistingDoc_Overwrites()
        {
            // Arrange

            var bucket = new MockBucket
            {
                { "key", new object() }
            };

            var newObject = new object();

            // Act

            var result = bucket.Upsert("key", newObject);

            // Assert

            Assert.True(result.Success);
            Assert.Equal(ResponseStatus.Success, result.Status);

            Assert.True(bucket.TryGetMock("key", out var mockDocument));
            Assert.Equal(newObject, mockDocument?.Content);
        }
コード例 #12
0
 protected void VerifyGetItems(string bucketName)
 {
     VerifyGetBucket(bucketName);
     MockBucket.Verify(m => m.GetItems(), Times.Once);
 }
コード例 #13
0
 private void VerifyGetItem(string key)
 {
     MockBucket.Verify(m => m.GetItem(It.Is <string>(k => k == key)), Times.Once);
 }
コード例 #14
0
        public MockBucketContext(MockBucket bucket)
        {
            _bucket = bucket ?? throw new ArgumentNullException(nameof(bucket));

            ResetMutationState();
        }