mardi 2 février 2016

Web Api with Entity Framework and DTO fails because of NULL navigation property

im facing a problem with testing an web api Controller and an fake entity Framework context. If i debug the application and POST to AddProtectedAccountMember it works fine but under my unit test it fails because the navigation property "Members" is null.

   [TestMethod]
   public void GetProtectedAccountMember_ShouldReturnSameMember()
    {
        var context = new TestDatabaseContext();
        var protectedAccountDTO = GetTestProtectedAccount();
        var protectedACcountMemberDTO = GetTestProtectedAccountMember();

        var protectedAccount = mapper.Map<ProtectedAccount>(protectedAccountDTO);
        var protectedAccountMember = mapper.Map<ProtectedAccount>(protectedAccountDTO);

        var controller = new ProtectedAccountsController(context);
        var response1 = controller.NewProtectedAccount(protectedAccountDTO) as CreatedAtRouteNegotiatedContentResult<ProtectedAccountDTO>;
        var response2 = controller.AddProtectedAccountMember(protectedAccountDTO.Id, protectedACcountMemberDTO) as CreatedAtRouteNegotiatedContentResult<ProtectedAccountMemberDTO>;

       }

-

    [ResponseType(typeof(ProtectedAccount))]
    [Route("ProtectedAccounts/{id}/Members", Name = "ProtectedAccountMember")]
    [HttpPost]
    public IHttpActionResult AddProtectedAccountMember(int id, ProtectedAccountMemberDTO protectedAccountMemberDTO)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var protectedAccount = db.ProtectedAccounts.Find(id);
        if(protectedAccount == null)
        {
            return NotFound();
        }

        ProtectedAccountMember member = mapper.Map <ProtectedAccountMember>(protectedAccountMemberDTO);

        protectedAccount.Members.Add(member);
        db.MarkAsModified(protectedAccount);
        db.SaveChanges();

        return CreatedAtRoute("ProtectedAccountMember", new { id = member.Id }, mapper.Map<ProtectedAccountMemberDTO>(member));
    }

Aucun commentaire:

Enregistrer un commentaire