using System.Net.Http; using System.Threading.Tasks; using Prise.IntegrationTestsHost.Models; using Microsoft.AspNetCore.Mvc.Testing; using Xunit; namespace Prise.IntegrationTests { public class CalculationTests : CalculationPluginTestsBase { public CalculationTests() : base(AppHostWebApplicationFactory.Default()) { } [Fact] public async Task PluginA_Works() { // Arrange var payload = new CalculationRequestModel { A = 100, B = 150 }; //Act var result = await Post(_client, "PluginA", "/calculation", payload); // Assert 100 + 150 Assert.Equal(250, result.Result); } [Fact] public async Task PluginB_Works() { // Arrange var payload = new CalculationRequestModel { A = 150, B = 50 }; //Act var result = await Post(_client, "PluginB", "/calculation", payload); // Assert 150 - 50 Assert.Equal(100, result.Result); } [Fact] public async Task PluginC_Works() { // Arrange var payload = new CalculationRequestModel { A = 50, B = 2 }; //Act var result = await Post(_client, "PluginC", "/calculation", payload); // Assert 50 * 2 + 10% discount Assert.Equal(110, result.Result); } [Fact] public async Task PluginA_int_Works() { // Arrange var payload = new CalculationRequestModel { A = 100, B = 150 }; //Act var result = await Post(_client, "PluginA", "/calculation/int", payload); // Assert 100 + 150 Assert.Equal(250, result.Result); } [Fact] public async Task PluginB_int_Works() { // Arrange var payload = new CalculationRequestModel { A = 150, B = 50 }; //Act var result = await Post(_client, "PluginB", "/calculation/int", payload); // Assert 150 - 50 Assert.Equal(100, result.Result); } [Fact] public async Task PluginC_int_Works() { // Arrange var payload = new CalculationRequestModel { A = 50, B = 2 }; //Act var result = await Post(_client, "PluginC", "/calculation/int", payload); // Assert 50 * 2 + 10% discount Assert.Equal(110, result.Result); } [Fact] public async Task PluginA_complex_input_Works() { // Arrange var payload = new CalculationRequestModel { A = 100, B = 150 }; //Act var result = await Post(_client, "PluginA", "/calculation/complex-input", payload); // Assert 100 + 150 Assert.Equal(250, result.Result); } [Fact] public async Task PluginB_complex_input_Works() { // Arrange var payload = new CalculationRequestModel { A = 150, B = 50 }; //Act var result = await Post(_client, "PluginB", "/calculation/complex-input", payload); // Assert 150 - 50 Assert.Equal(100, result.Result); } [Fact] public async Task PluginC_complex_input_Works() { // Arrange var payload = new CalculationRequestModel { A = 50, B = 2 }; //Act var result = await Post(_client, "PluginC", "/calculation/complex-input", payload); // Assert 50 * 2 + 10% discount Assert.Equal(110, result.Result); } [Fact] public async Task PluginA_complex_output_Works() { // Arrange var payload = new CalculationRequestModel { A = 100, B = 150 }; //Act var result = await Post(_client, "PluginA", "/calculation/complex-output", payload); // Assert 100 + 150 Assert.Equal(250, result.Result); } [Fact] public async Task PluginB_complex_output_Works() { // Arrange var payload = new CalculationRequestModel { A = 150, B = 50 }; //Act var result = await Post(_client, "PluginB", "/calculation/complex-output", payload); // Assert 150 - 50 Assert.Equal(100, result.Result); } [Fact] public async Task PluginC_complex_output_Works() { // Arrange var payload = new CalculationRequestModel { A = 50, B = 2 }; //Act var result = await Post(_client, "PluginC", "/calculation/complex-output", payload); // Assert 50 * 2 + 10% discount Assert.Equal(110, result.Result); } [Fact] public async Task PluginA_multi_Works() { // Arrange var payload = new CalculationRequestMultiModel { Calculations = new[] { new CalculationRequestModel { A = 100, B = 150 }, new CalculationRequestModel { A = 100, B = 150 } } }; //Act var result = await Post(_client, "PluginA", "/calculation/multi", payload); // Assert 100 + 150 + 100 + 150 Assert.Equal(500, result.Result); } [Fact] public async Task PluginB_multi_Works() { // Arrange var payload = new CalculationRequestMultiModel { Calculations = new[] { new CalculationRequestModel { A = 50, B = 5 }, new CalculationRequestModel { A = 40, B = 5 } } }; //Act var result = await Post(_client, "PluginB", "/calculation/multi", payload); // Assert (50 - 5) + (40 - 5) Assert.Equal(80, result.Result); } [Fact] public async Task PluginC_multi_Works() { // Arrange var payload = new CalculationRequestMultiModel { Calculations = new[] { new CalculationRequestModel { A = 50, B = 2 }, new CalculationRequestModel { A = 40, B = 2 } } }; //Act var result = await Post(_client, "PluginC", "/calculation/multi", payload); // Assert (50 * 2 + 10% discount) + (40 * 2 + 10% discount) Assert.Equal(198, result.Result); } [Fact] public async Task PluginC_multi_async_Works() { // Arrange var payload = new CalculationRequestMultiModel { Calculations = new[] { new CalculationRequestModel { A = 50, B = 2 }, new CalculationRequestModel { A = 40, B = 2 } } }; //Act var result = await Post(_client, "PluginC", "/calculation/multi-async", payload); // Assert (50 * 2 + 10% discount) + (40 * 2 + 10% discount) Assert.Equal(198, result.Result); } } }