コード例 #1
0
        public async void GetRemarks_Should_Call_IApiClient_Send()
        {
            Func <HttpResponseMessage, Task <IEnumerable <RemarkDetails> > > mapper = null;
            var request = new HttpRequestMessage();

            _requestProvider.CreatePostRequest(Arg.Any <string>(), Arg.Any <JObject>(), Arg.Any <Dictionary <string, string> >()).Returns(request);
            await _apiClient.Send(Arg.Any <HttpRequestMessage>(), Arg.Do <Func <HttpResponseMessage, Task <IEnumerable <RemarkDetails> > > >(a => mapper = a));

            await _repository.GetRemarks();

            await _apiClient.Received(1).Send <IEnumerable <RemarkDetails> >(request, Arg.Any <Func <HttpResponseMessage, Task <IEnumerable <RemarkDetails> > > >());

            var expected = new RemarkDetails
            {
                RemarkId  = "remarkId",
                Latitude  = 123,
                Longitude = 456,
                Remark    = "remarks",
                Email     = "email"
            };
            var item = new JObject
            {
                ["document"] = new JObject
                {
                    ["name"]   = $"remarks/{expected.RemarkId}",
                    ["fields"] = new JObject
                    {
                        ["lat"] = new JObject {
                            ["doubleValue"] = expected.Latitude
                        },
                        ["lng"] = new JObject {
                            ["doubleValue"] = expected.Longitude
                        },
                        ["remark"] = new JObject {
                            ["stringValue"] = expected.Remark
                        },
                        ["email"] = new JObject {
                            ["stringValue"] = expected.Email
                        }
                    }
                }
            };
            var body = new JArray {
                item
            };

            var response = new HttpResponseMessage();

            response.Content = new StringContent(body.ToString());
            var actual = await mapper(response);

            actual.Should().HaveCount(1);
            actual.Single().RemarkId.Should().Be(expected.RemarkId);
            actual.Single().Latitude.Should().Be(expected.Latitude);
            actual.Single().Longitude.Should().Be(expected.Longitude);
            actual.Single().Remark.Should().Be(expected.Remark);
            actual.Single().Email.Should().Be(expected.Email);

            request.Dispose();
        }
コード例 #2
0
        public async void AddRemark_Should_Return_Correctly()
        {
            var expected = new RemarkDetails();

            _repository.AddRemark(Arg.Any <RemarkDetails>()).Returns(expected);

            var actual = await _service.AddRemark("email", new AddRemarkRequest());

            actual.Should().Be(expected);
        }
コード例 #3
0
        public async Task <RemarkDetails> AddRemark(RemarkDetails remark)
        {
            var url     = $"{_endpoint}/remarks";
            var content = CreateAddRemarkRequest(remark);

            var request  = _requestProvider.CreatePostRequest(url, content, headers: _defaultHeader, queries: _defaultQuery);
            var response = await _apiClient.Send(request, async resp =>
            {
                var body = await resp.Content.ReadAsStringAsync();
                var obj  = JToken.Parse(body);
                return(GetRemarkDetailsResponse(obj));
            });

            return(response);
        }
コード例 #4
0
        public async void AddRemark_Should_Call_Return_Correctly()
        {
            var request = new HttpRequestMessage();

            _requestProvider.CreatePostRequest(Arg.Any <string>(), Arg.Any <JObject>(), Arg.Any <Dictionary <string, string> >(), Arg.Any <Dictionary <string, string> >()).Returns(request);

            var response = new RemarkDetails();

            _apiClient.Send(Arg.Any <HttpRequestMessage>(), Arg.Any <Func <HttpResponseMessage, Task <RemarkDetails> > >()).Returns(response);

            var actual = await _repository.AddRemark(new RemarkDetails());

            actual.Should().Be(response);

            request.Dispose();
        }
コード例 #5
0
 private JObject CreateAddRemarkRequest(RemarkDetails remark)
 {
     return(new JObject
     {
         ["fields"] = new JObject
         {
             ["lat"] = new JObject {
                 ["doubleValue"] = remark.Latitude
             },
             ["lng"] = new JObject {
                 ["doubleValue"] = remark.Longitude
             },
             ["remark"] = new JObject {
                 ["stringValue"] = remark.Remark
             },
             ["email"] = new JObject {
                 ["stringValue"] = remark.Email
             }
         }
     });
 }
コード例 #6
0
        public async void AddRemark_Should_Call_IRemarksRepository_AddRemark()
        {
            var email   = "email";
            var request = new AddRemarkRequest
            {
                Latitude  = 123,
                Longitude = 456,
                Remark    = "remarks"
            };

            RemarkDetails arg = null;
            await _repository.AddRemark(Arg.Do <RemarkDetails>(a => arg = a));

            await _service.AddRemark(email, request);

            await _repository.Received(1).AddRemark(Arg.Any <RemarkDetails>());

            arg.Email.Should().Be(email);
            arg.Latitude.Should().Be(request.Latitude);
            arg.Longitude.Should().Be(request.Longitude);
            arg.Remark.Should().Be(request.Remark);
        }
コード例 #7
0
        public async void AddRemark_Should_Call_IApiRequestProvider_CreatePostRequest()
        {
            JObject content = null;
            Dictionary <string, string> header = null;
            Dictionary <string, string> query  = null;

            _requestProvider.CreatePostRequest(Arg.Any <string>(), Arg.Do <JObject>(a => content = a), headers: Arg.Do <Dictionary <string, string> >(a => header = a), queries: Arg.Do <Dictionary <string, string> >(a => query = a));

            var details = new RemarkDetails
            {
                Latitude  = 123,
                Longitude = 456,
                Remark    = "remarks",
                Email     = "email"
            };
            await _repository.AddRemark(details);

            _requestProvider.Received(1).CreatePostRequest($"{_firebaseDatabase}/projects/{_firebaseProjectId}/databases/(default)/documents/remarks", Arg.Any <JObject>(), headers: Arg.Any <Dictionary <string, string> >(), queries: Arg.Any <Dictionary <string, string> >());

            content.Should().ContainKey("fields");
            content.SelectToken("fields").Value <JObject>().Should().ContainKey("lat");
            content.SelectToken("fields.lat").Value <JObject>().Should().ContainKey("doubleValue");
            content.SelectToken("fields.lat.doubleValue").Value <double>().Should().Be(details.Latitude);
            content.SelectToken("fields").Value <JObject>().Should().ContainKey("lng");
            content.SelectToken("fields.lng").Value <JObject>().Should().ContainKey("doubleValue");
            content.SelectToken("fields.lng.doubleValue").Value <double>().Should().Be(details.Longitude);
            content.SelectToken("fields").Value <JObject>().Should().ContainKey("remark");
            content.SelectToken("fields.remark").Value <JObject>().Should().ContainKey("stringValue");
            content.SelectToken("fields.remark.stringValue").Value <string>().Should().Be(details.Remark);
            content.SelectToken("fields").Value <JObject>().Should().ContainKey("email");
            content.SelectToken("fields.email").Value <JObject>().Should().ContainKey("stringValue");
            content.SelectToken("fields.email.stringValue").Value <string>().Should().Be(details.Email);

            header.Should().ContainKey("Authorization");
            header["Authorization"].Should().Be(_requestAuthorisation);

            query.Should().ContainKey("key");
            query["key"].Should().Be(_firebaseApiKey);
        }
コード例 #8
0
        public async void AddRemark_Should_Return_Correctly()
        {
            var response = new RemarkDetails();
            var service  = Substitute.For <IRemarksService>();

            service.AddRemark(Arg.Any <string>(), Arg.Any <AddRemarkRequest>()).Returns(response);

            var provider = Substitute.For <IUserDetailsProvider>();

            provider.GetUserDetails().Returns(new UserDetails());

            var actual = await _controller.AddRemark(new AddRemarkRequest(), service, provider);

            actual.Should().BeOfType <ActionResult <ApiResponse> >();

            actual.Result.Should().BeOfType <ObjectResult>();
            actual.Result.As <ObjectResult>().StatusCode.Should().Be(StatusCodes.Status201Created);

            actual.Result.As <ObjectResult>().Value.Should().BeOfType <ApiResponse>();
            actual.Result.As <ObjectResult>().Value.As <ApiResponse>().Success.Should().Be(true);
            actual.Result.As <ObjectResult>().Value.As <ApiResponse>().Message.Should().Be("Remark created.");
            actual.Result.As <ObjectResult>().Value.As <ApiResponse>().Data.Should().Be(response);
        }