diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAppServiceConvention.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAppServiceConvention.cs index 4dac8cf831..eb0ed9ae91 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAppServiceConvention.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAppServiceConvention.cs @@ -249,14 +249,7 @@ namespace Volo.Abp.AspNetCore.Mvc private static AttributeRouteModel CreateAbpServiceAttributeRouteModel(string moduleName, string controllerName, ActionModel action, string verb) { - //TODO: Implement via interfaces! - - var url = $"api/services/{moduleName}/{controllerName}"; - if (!verb.IsIn("POST")) - { - url += $"/{action.ActionName}"; - } - + var url = $"api/services/{moduleName}/{controllerName}/{action.ActionName}"; return new AttributeRouteModel(new RouteAttribute(url)); } diff --git a/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs b/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs index e11f4910c7..5684bfbb9f 100644 --- a/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs +++ b/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs @@ -69,11 +69,10 @@ namespace Volo.Abp.AspNetCore.Mvc //Ideally should be [POST] /api/app/person var response = await Client.PostAsync( - "/api/services/app/person", + "/api/services/app/person/Create", new StringContent(postData, Encoding.UTF8, "application/json") ); - response.IsSuccessStatusCode.ShouldBeTrue(); response.StatusCode.ShouldBe(HttpStatusCode.OK); var resultAsString = await response.Content.ReadAsStringAsync(); PersonDto resultDto = _jsonSerializer.Deserialize(resultAsString); @@ -107,7 +106,6 @@ namespace Volo.Abp.AspNetCore.Mvc new StringContent(putData, Encoding.UTF8, "application/json") ); - response.IsSuccessStatusCode.ShouldBeTrue(); response.StatusCode.ShouldBe(HttpStatusCode.OK); var resultAsString = await response.Content.ReadAsStringAsync(); PersonDto resultDto = _jsonSerializer.Deserialize(resultAsString); @@ -123,5 +121,37 @@ namespace Volo.Abp.AspNetCore.Mvc personInDb.Name.ShouldBe(firstPerson.Name); personInDb.Age.ShouldBe(firstPersonAge + 1); } + + [Fact] + public async Task AddPhone_Test() + { + //Arrange + + var personToAddNewPhone = _personRepository.GetList().First(); + var phoneNumberToAdd = RandomHelper.GetRandom(1000000, 9000000).ToString(); + + //Act + + var postData = _jsonSerializer.Serialize(new PhoneDto { Type = PhoneType.Mobile, Number = phoneNumberToAdd }); + + //Ideally should be [POST] /api/people/{id}/phones + var response = await Client.PostAsync( + "/api/services/app/person/AddPhone?id=" + personToAddNewPhone.Id, + new StringContent(postData, Encoding.UTF8, "application/json") + ); + + response.StatusCode.ShouldBe(HttpStatusCode.OK); + var resultAsString = await response.Content.ReadAsStringAsync(); + var resultDto = _jsonSerializer.Deserialize(resultAsString); + + //Assert + + resultDto.Type.ShouldBe(PhoneType.Mobile); + resultDto.Number.ShouldBe(phoneNumberToAdd); + + var personInDb = await _personRepository.FindAsync(personToAddNewPhone.Id); + personInDb.ShouldNotBeNull(); + personInDb.Phones.Any(p => p.Number == phoneNumberToAdd).ShouldBeTrue(); + } } } diff --git a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/IPersonAppService.cs b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/IPersonAppService.cs index 81b8434b61..6a44aa4d73 100644 --- a/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/IPersonAppService.cs +++ b/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/IPersonAppService.cs @@ -10,7 +10,6 @@ namespace Volo.Abp.TestApp.Application //URL: [GET] /api/people/{id}?type=office Task> GetPhones(Guid id, GetPersonPhonesFilter filter); - //URL: [POST] /api/people/{id}/phones Task AddPhone(Guid id, PhoneDto phoneDto); //URL: [DELETE] /api/people/{id}/phones/{phoneId}