internal Task <TriggerResponse> CreateTriggerResponseAsync(Task <CosmosResponseMessage> cosmosResponseMessageTask) { return(this.ProcessMessageAsync(cosmosResponseMessageTask, (cosmosResponseMessage) => { CosmosTriggerProperties settings = this.ToObjectInternal <CosmosTriggerProperties>(cosmosResponseMessage, this.settingsSerializer); return new TriggerResponse( cosmosResponseMessage.StatusCode, cosmosResponseMessage.Headers, settings); })); }
private static void ValidateTriggerSettings(CosmosTriggerProperties triggerSettings, TriggerResponse cosmosResponse) { CosmosTriggerProperties settings = cosmosResponse.Resource; Assert.AreEqual(triggerSettings.Body, settings.Body, "Trigger function do not match"); Assert.AreEqual(triggerSettings.Id, settings.Id, "Trigger id do not match"); Assert.IsTrue(cosmosResponse.RequestCharge > 0); Assert.IsNotNull(cosmosResponse.MaxResourceQuota); Assert.IsNotNull(cosmosResponse.CurrentResourceQuotaUsage); }
public async Task CRUDTest() { CosmosTriggerProperties settings = new CosmosTriggerProperties { Id = Guid.NewGuid().ToString(), Body = TriggersTests.GetTriggerFunction(".05"), TriggerOperation = Scripts.TriggerOperation.Create, TriggerType = Scripts.TriggerType.Pre }; TriggerResponse triggerResponse = await this.scripts.CreateTriggerAsync(settings); double reqeustCharge = triggerResponse.RequestCharge; Assert.IsTrue(reqeustCharge > 0); Assert.AreEqual(HttpStatusCode.Created, triggerResponse.StatusCode); TriggersTests.ValidateTriggerSettings(settings, triggerResponse); triggerResponse = await this.scripts.ReadTriggerAsync(settings.Id); reqeustCharge = triggerResponse.RequestCharge; Assert.IsTrue(reqeustCharge > 0); Assert.AreEqual(HttpStatusCode.OK, triggerResponse.StatusCode); TriggersTests.ValidateTriggerSettings(settings, triggerResponse); CosmosTriggerProperties updatedSettings = triggerResponse.Resource; updatedSettings.Body = TriggersTests.GetTriggerFunction(".42"); TriggerResponse replaceResponse = await this.scripts.ReplaceTriggerAsync(updatedSettings); TriggersTests.ValidateTriggerSettings(updatedSettings, replaceResponse); reqeustCharge = replaceResponse.RequestCharge; Assert.IsTrue(reqeustCharge > 0); Assert.AreEqual(HttpStatusCode.OK, replaceResponse.StatusCode); replaceResponse = await this.scripts.DeleteTriggerAsync(updatedSettings.Id); reqeustCharge = replaceResponse.RequestCharge; Assert.IsTrue(reqeustCharge > 0); Assert.AreEqual(HttpStatusCode.NoContent, replaceResponse.StatusCode); }
public async Task TriggersIteratorTest() { CosmosTriggerProperties cosmosTrigger = await CreateRandomTrigger(); HashSet <string> settings = new HashSet <string>(); FeedIterator <CosmosTriggerProperties> iter = this.scripts.GetTriggersIterator();; while (iter.HasMoreResults) { foreach (CosmosTriggerProperties storedProcedureSettingsEntry in await iter.FetchNextSetAsync()) { settings.Add(storedProcedureSettingsEntry.Id); } } Assert.IsTrue(settings.Contains(cosmosTrigger.Id), "The iterator did not return the user defined function definition."); // Delete existing user defined functions. await this.scripts.DeleteTriggerAsync(cosmosTrigger.Id); }
public async Task ValidateTriggersTest() { // Prevent failures if previous test did not clean up correctly await this.scripts.DeleteTriggerAsync("addTax"); ToDoActivity item = new ToDoActivity() { id = Guid.NewGuid().ToString(), cost = 9001, description = "trigger_test_item", status = "Done", taskNum = 1 }; CosmosTriggerProperties cosmosTrigger = await this.scripts.CreateTriggerAsync( new CosmosTriggerProperties { Id = "addTax", Body = TriggersTests.GetTriggerFunction(".20"), TriggerOperation = Scripts.TriggerOperation.All, TriggerType = Scripts.TriggerType.Pre }); ItemRequestOptions options = new ItemRequestOptions() { PreTriggers = new List <string>() { cosmosTrigger.Id }, }; ItemResponse <dynamic> createdItem = await this.container.CreateItemAsync <dynamic>(item, requestOptions : options); double itemTax = createdItem.Resource.tax; Assert.AreEqual(item.cost * .20, itemTax); // Delete existing user defined functions. await this.scripts.DeleteTriggerAsync("addTax"); }
private async Task <TriggerResponse> CreateRandomTrigger() { string id = Guid.NewGuid().ToString(); string function = GetTriggerFunction(".05"); CosmosTriggerProperties settings = new CosmosTriggerProperties { Id = id, Body = function, TriggerOperation = Scripts.TriggerOperation.Create, TriggerType = Scripts.TriggerType.Pre }; //Create a user defined function TriggerResponse createResponse = await this.scripts.CreateTriggerAsync( triggerSettings : settings, cancellationToken : this.cancellationToken); ValidateTriggerSettings(settings, createResponse); return(createResponse); }
public async Task ValidateResponseFactoryJsonSerializer() { CosmosResponseMessage databaseResponse = this.CreateResponse(); CosmosResponseMessage containerResponse = this.CreateResponse(); CosmosResponseMessage storedProcedureExecuteResponse = this.CreateResponse(); CosmosResponseMessage storedProcedureResponse = this.CreateResponse(); CosmosResponseMessage triggerResponse = this.CreateResponse(); CosmosResponseMessage udfResponse = this.CreateResponse(); CosmosResponseMessage itemResponse = this.CreateResponse(); CosmosResponseMessage feedResponse = this.CreateResponse(); Mock <CosmosJsonSerializer> mockUserJsonSerializer = new Mock <CosmosJsonSerializer>(); Mock <CosmosJsonSerializer> mockDefaultJsonSerializer = new Mock <CosmosJsonSerializer>(); CosmosResponseFactory cosmosResponseFactory = new CosmosResponseFactory( defaultJsonSerializer: mockDefaultJsonSerializer.Object, userJsonSerializer: mockUserJsonSerializer.Object); // Test the user specified response mockUserJsonSerializer.Setup(x => x.FromStream <ToDoActivity>(itemResponse.Content)).Returns(new ToDoActivity()); mockUserJsonSerializer.Setup(x => x.FromStream <ToDoActivity>(storedProcedureExecuteResponse.Content)).Returns(new ToDoActivity()); mockUserJsonSerializer.Setup(x => x.FromStream <CosmosFeedResponseUtil <ToDoActivity> >(feedResponse.Content)).Returns(new CosmosFeedResponseUtil <ToDoActivity>() { Data = new Collection <ToDoActivity>() }); // Verify all the user types use the user specified version await cosmosResponseFactory.CreateItemResponseAsync <ToDoActivity>(Task.FromResult(itemResponse)); await cosmosResponseFactory.CreateStoredProcedureExecuteResponseAsync <ToDoActivity>(Task.FromResult(storedProcedureExecuteResponse)); cosmosResponseFactory.CreateResultSetQueryResponse <ToDoActivity>(feedResponse); // Throw if the setups were not called mockUserJsonSerializer.VerifyAll(); // Test the system specified response CosmosContainerProperties containerSettings = new CosmosContainerProperties("mockId", "/pk"); CosmosDatabaseProperties databaseSettings = new CosmosDatabaseProperties() { Id = "mock" }; CosmosStoredProcedureProperties cosmosStoredProcedureSettings = new CosmosStoredProcedureProperties() { Id = "mock" }; CosmosTriggerProperties cosmosTriggerSettings = new CosmosTriggerProperties() { Id = "mock" }; CosmosUserDefinedFunctionProperties cosmosUserDefinedFunctionSettings = new CosmosUserDefinedFunctionProperties() { Id = "mock" }; mockDefaultJsonSerializer.Setup(x => x.FromStream <CosmosDatabaseProperties>(databaseResponse.Content)).Returns(databaseSettings); mockDefaultJsonSerializer.Setup(x => x.FromStream <CosmosContainerProperties>(containerResponse.Content)).Returns(containerSettings); mockDefaultJsonSerializer.Setup(x => x.FromStream <CosmosStoredProcedureProperties>(storedProcedureResponse.Content)).Returns(cosmosStoredProcedureSettings); mockDefaultJsonSerializer.Setup(x => x.FromStream <CosmosTriggerProperties>(triggerResponse.Content)).Returns(cosmosTriggerSettings); mockDefaultJsonSerializer.Setup(x => x.FromStream <CosmosUserDefinedFunctionProperties>(udfResponse.Content)).Returns(cosmosUserDefinedFunctionSettings); Mock <CosmosContainer> mockContainer = new Mock <CosmosContainer>(); Mock <CosmosDatabase> mockDatabase = new Mock <CosmosDatabase>(); // Verify all the system types that should always use default await cosmosResponseFactory.CreateContainerResponseAsync(mockContainer.Object, Task.FromResult(containerResponse)); await cosmosResponseFactory.CreateDatabaseResponseAsync(mockDatabase.Object, Task.FromResult(databaseResponse)); await cosmosResponseFactory.CreateStoredProcedureResponseAsync(Task.FromResult(storedProcedureResponse)); await cosmosResponseFactory.CreateTriggerResponseAsync(Task.FromResult(triggerResponse)); await cosmosResponseFactory.CreateUserDefinedFunctionResponseAsync(Task.FromResult(udfResponse)); // Throw if the setups were not called mockDefaultJsonSerializer.VerifyAll(); }