public void WhenTheClientGetsTheProjectByHeaderLocation() { var client = StepHelpers.SetupHttpClient(_projectTestModel.UserName, _projectTestModel.Password); _responseContent = client.GetAsync(_responseContent.Headers.Location).Result; _projectSaved = JsonConvert.DeserializeObject<Project>(_responseContent.Content.ReadAsStringAsync().Result); client.Dispose(); }
public void WhenTheClientGetsTheProjectByID() { var client = StepHelpers.SetupHttpClient(_projectTestModel.UserName, _projectTestModel.Password); _responseContent = client.GetAsync("http://localhost:55301/api/v1/projects/" + _projectSaved.ProjectId).Result; _projectSaved = JsonConvert.DeserializeObject<Project>(_responseContent.Content.ReadAsStringAsync().Result); client.Dispose(); }
// POST api/projects (Insert) public override HttpResponseMessage Post(Project project) { // Check for presence of V2 "IsUrgent" flag. if (project.IsUrgent == null) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The IsUrgent indicator is required."); } try { project.UserName = User.Identity.Name; project.DateCreated = DateTime.Now; project.DateUpdated = DateTime.Now; _projectRepository.Insert(project); _projectRepository.Commit(); } catch (Exception ex) { var error = new HttpError("Error inserting project: " + ex.Message) { { "Trace", ex.StackTrace } }; return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, error); } var response = Request.CreateResponse(HttpStatusCode.Created, project); string uri = Url.Link("DefaultApi", new { id = project.ProjectId }); response.Headers.Location = new Uri(uri); return response; }
// GET /api/projects/4/researchitems/5 public virtual HttpResponseMessage Get(int projectId, int researchItemId) { var researchItems = new List<ResearchItem>(); var project = new Project(); try { // Verify that the user is the owner of project and research item. project = _projectRepository.GetByUser(projectId, User.Identity.Name); if (project == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Project not found for user " + User.Identity.Name + "."); } var researchItem = _researchItemRepository.GetByUser(researchItemId, User.Identity.Name); if (researchItem == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Research item not found for user " + User.Identity.Name + "."); } researchItems.Add(researchItem); } catch (Exception ex) { var error = new HttpError("Error getting research item: " + ex.Message) { { "Trace", ex.StackTrace } }; return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, error); } var researchItemDto = new ResearchItemDto() { Meta = new ResearchItemMeta() { NumberResearchItems = researchItems.Count(), ProjectName = project.Name }, ResearchItems = researchItems }; return Request.CreateResponse<ResearchItemDto>(HttpStatusCode.OK, researchItemDto); }
// PUT api/projects/5 (Update) public override HttpResponseMessage Put(int id, Project project) { // Check for presence of V2 "IsUrgent" flag. if (project.IsUrgent == null) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The IsUrgent indicator is required."); } var currentProject = new Project(); try { // Verify that the user is the owner currentProject = _projectRepository.GetByUser(id, User.Identity.Name); if (currentProject == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Project not found for user " + User.Identity.Name + "."); } currentProject.DateUpdated = DateTime.Now; currentProject.Name = project.Name; currentProject.Description = project.Description; currentProject.IsUrgent = project.IsUrgent; _projectRepository.Commit(); } catch (Exception ex) { var error = new HttpError("Error updating project: " + ex.Message) { { "Trace", ex.StackTrace } }; return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, error); } var response = Request.CreateResponse(HttpStatusCode.OK, currentProject); string uri = Url.Link("DefaultApi", new { id = id }); response.Headers.Location = new Uri(uri); return response; }
// GET api/projects/5 (Detail) public virtual HttpResponseMessage Get(int id) { var project = new Project(); try { // Verify that the user is the owner project = _projectRepository.GetByUser(id, User.Identity.Name); if (project == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Project not found for user " + User.Identity.Name + "."); } } catch (Exception ex) { var error = new HttpError("Error getting project: " + ex.Message) { { "Trace", ex.StackTrace } }; return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, error); } return Request.CreateResponse<Project>(HttpStatusCode.OK, project); }
// POST api/projects (Insert) public virtual HttpResponseMessage Post(Project project) { try { project.UserName = User.Identity.Name; project.DateCreated = DateTime.Now; project.DateUpdated = DateTime.Now; _projectRepository.Insert(project); _projectRepository.Commit(); } catch (Exception ex) { var error = new HttpError("Error inserting project: " + ex.Message) { { "Trace", ex.StackTrace } }; return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, error); } var response = Request.CreateResponse(HttpStatusCode.Created, project); string uri = Url.Link("DefaultApi", new { id = project.ProjectId }); response.Headers.Location = new Uri(uri); return response; }
// PUT /api/projects/4/researchitems/5 public virtual HttpResponseMessage Put(int projectId, int researchItemId, ResearchItem researchItem) { var project = new Project(); ResearchItem currentResearchItem = null; try { project = _projectRepository.GetByUser(projectId, User.Identity.Name); if (project == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Project not found for user " + User.Identity.Name + "."); } currentResearchItem = _researchItemRepository.GetByUser(researchItemId, User.Identity.Name); if (currentResearchItem == null) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Research item not found for user " + User.Identity.Name + "."); } currentResearchItem.DateUpdated = DateTime.Now; currentResearchItem.Subject = researchItem.Subject; currentResearchItem.Description = researchItem.Description; _researchItemRepository.Commit(); } catch (Exception ex) { var error = new HttpError("Error updating research item: " + ex.Message) { { "Trace", ex.StackTrace } }; return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, error); } var response = Request.CreateResponse(HttpStatusCode.OK, currentResearchItem); string uri = Url.Link("ProjectResearchItemsApi", new { projectId = projectId, researchItemId = researchItem.ResearchItemId }); response.Headers.Location = new Uri(uri); return response; }
public void Put_Project_Database_Exception_Returns_Error(string version) { //Setup _projectRepository = _mockRepositories.GetProjectsRepository(ReturnType.Exception); var projectsController = SetupController(_projectRepository.Object, "james", HttpMethod.Put, version); var inputProject = new Project() { ProjectId = 1, Name = "Update Test 1", UserName = "******", Description = "Insert Test Description", IsUrgent = true }; //Act var response = projectsController.Put(1, inputProject); dynamic errorMessage = JObject.Parse(response.Content.ReadAsStringAsync().Result); //Assert Assert.AreEqual(HttpStatusCode.InternalServerError, response.StatusCode, "Expecting an Internal Server Error Status Code"); Assert.AreEqual("Error updating project: Database exception!", (string)errorMessage.Message); }
public void Put_Project_When_IsUrgent_Missing_Returns_Bad_Request(string version) { //Setup _projectRepository = _mockRepositories.GetProjectsRepository(ReturnType.Exception); var projectsController = SetupController(_projectRepository.Object, "james", HttpMethod.Put, version); var inputProject = new Project() { ProjectId = 1, Name = "Update Test 1", UserName = "******", Description = "Insert Test Description" }; //Act var response = projectsController.Put(1, inputProject); dynamic errorMessage = JObject.Parse(response.Content.ReadAsStringAsync().Result); //Assert Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode, "Expecting a Bad Request Status Code"); }
public void Put_James_Project_Returns_Null_Project_For_John(string version) { //Setup _projectRepository = _mockRepositories.GetProjectsRepository(ReturnType.Normal); var projectsController = SetupController(_projectRepository.Object, "john", HttpMethod.Put, version); var inputProject = new Project() { ProjectId = 1, Name = "Update Test 1", UserName = "******", Description = "Insert Test Description", IsUrgent = true }; //Act var response = projectsController.Put(1, inputProject); dynamic errorMessage = JObject.Parse(response.Content.ReadAsStringAsync().Result); //Assert Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode, "Expecting a Not Found Status Code"); Assert.AreEqual("Project not found for user john.", (string)errorMessage.Message); }
public void Put_Project_Returns_Expected_Header_For_James(string version) { //Setup _projectRepository = _mockRepositories.GetProjectsRepository(ReturnType.Normal); var projectsController = SetupController(_projectRepository.Object, "james", HttpMethod.Put, version); var inputProject = new Project() { ProjectId = 1, Name = "Update Test 1", UserName = "******", Description = "Insert Test Description", IsUrgent = true }; //Act var response = projectsController.Put(1, inputProject); //Assert Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "Expecting an OK Status Code"); Assert.AreEqual("http://localhost/api/projects/1", response.Headers.Location.ToString()); }
public void Post_Project_When_IsUrgent_Missing_Returns_Bad_Request(string version) { //Setup _projectRepository = _mockRepositories.GetProjectsRepository(ReturnType.Normal); var projectsController = SetupController(_projectRepository.Object, "james", HttpMethod.Post, version); var inputProject = new Project() { ProjectId = 1, Name = "Insert Test", UserName = "******", Description = "Insert Test Description" }; //Act var response = projectsController.Post(inputProject); //Assert Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode, "Expecting a Bad Request Status Code"); }