public UpdatePackage GetUpdatePackage() { UpdatePackage updatePackage = new UpdatePackage(); updatePackage.ProjectName = ProjectName; updatePackage.Subject = Subject; updatePackage.Body = Body; updatePackage.Updates = Updates; return updatePackage; }
/// <summary> /// This takes an UpdatePackage, which represents an email, and records it to the database /// </summary> /// <param name="package">An UpdatePackage is a normalized email</param> /// <returns>Guid of updated project as a string. /// Useful if this project is new or caller wants to retreive other data on that project</returns> public string RecordUpdatePackage(UpdatePackage package) { //__get the information from input string projectName = package.ProjectName; string subject = package.Subject; string body = package.Body; if (string.IsNullOrEmpty(projectName)) return null; Dictionary<string, string> updatePairs = package.Updates; Project project = context.Projects.FirstOrDefault(p => p.ProjectName == projectName); //__if no existing project, create new one bool madeNewProject = false; if (project == null) { project = new Project(); project.ProjectID = Guid.NewGuid(); madeNewProject = true; } //__get the Project ID to use locally Guid projectID = project.ProjectID; //__Look for VerticalID int verticalID = -1;//__default is not assigned. try { KeyValuePair<string, string> verticalPair = updatePairs.FirstOrDefault(u => u.Key.ToLower() == "verticalid"); if (verticalPair.Value != null) verticalID = Convert.ToInt16(verticalPair.Value); if (verticalID < -1 || verticalID > 8) verticalID = -1; } catch (Exception) { //__just use default value verticalID = -1; } //__these might be new or changed project.VerticalID = verticalID; project.ProjectName = projectName; //__Look for a PhaseID int phaseID = -1; try { KeyValuePair<string, string> phasePair = updatePairs.FirstOrDefault(u => u.Key.ToLower() == "phaseid"); if (phasePair.Value != null) phaseID = Convert.ToInt16(phasePair.Value); if (phaseID < -1 || phaseID > 7) phaseID = -1; } catch (Exception) { //_simply use default phaseID = -1; } //__do fuzzy word matches if no phase found yet if (phaseID < 0) { string searchString = subject + body; phaseID = Convert.ToInt16(PhaseKeywords.GuessPhase(searchString)); } //__if this is new Project write it to DB if (madeNewProject) { context.Projects.Add(project); context.SaveChanges(); } //__create and record new ProjectUpdate ProjectUpdate projectUpdate = new ProjectUpdate(); projectUpdate.ProjectUpdateID = Guid.NewGuid(); projectUpdate.ProjectID = projectID; projectUpdate.Subject = subject; projectUpdate.Body = body; context.ProjectUpdates.Add(projectUpdate); context.SaveChanges(); //__build and record StatusUpdates from list of Key:Value pairs //__also make sure to update ProjectPhase table for efficient queries later StatusUpdate statusUpdateTemplate = new StatusUpdate(); statusUpdateTemplate.ProjectID = projectID; statusUpdateTemplate.ProjectUpdateID = projectUpdate.ProjectUpdateID; statusUpdateTemplate.PhaseID = phaseID; statusUpdateTemplate.VerticalID = verticalID; //__safety, incase of duplicate keys, combine the values so there is only one entry //___trying to record duplicate keys in the same PackageUpdate will cause primary key error in DB Dictionary<string, string> cleanedPairs = combineEqualKeys(updatePairs); foreach (var pair in cleanedPairs) { string key = pair.Key; string value = pair.Value; StatusUpdate statusUpdate = statusUpdateTemplate.Clone(); statusUpdate.UpdateKey = key; statusUpdate.UpdateValue = value; statusUpdate.RecordDate = DateTime.Now; context.StatusUpdates.Add(statusUpdate); context.SaveChanges(); updateProjectPhase(projectID, phaseID, key); } return projectID.ToString(); }
/// <summary> /// This takes an UpdatePackage, which represents an email, and records it to the database /// </summary> /// <param name="package">An UpdatePackage is a normalized email</param> /// <returns>Guid of updated project as a string. /// Useful if this project is new or caller wants to retreive other data on that project</returns> public string RecordUpdatePackage(UpdatePackage package) { //__get the information from input string projectName = package.ProjectName; string subject = package.Subject; string body = package.Body; if (string.IsNullOrEmpty(projectName)) { return(null); } Dictionary <string, string> updatePairs = package.Updates; Project project = context.Projects.FirstOrDefault(p => p.ProjectName == projectName); //__if no existing project, create new one bool madeNewProject = false; if (project == null) { project = new Project(); project.ProjectID = Guid.NewGuid(); madeNewProject = true; } //__get the Project ID to use locally Guid projectID = project.ProjectID; //__Look for VerticalID int verticalID = -1;//__default is not assigned. try { KeyValuePair <string, string> verticalPair = updatePairs.FirstOrDefault(u => u.Key.ToLower() == "verticalid"); if (verticalPair.Value != null) { verticalID = Convert.ToInt16(verticalPair.Value); } if (verticalID < -1 || verticalID > 8) { verticalID = -1; } } catch (Exception) { //__just use default value verticalID = -1; } //__these might be new or changed project.VerticalID = verticalID; project.ProjectName = projectName; //__Look for a PhaseID int phaseID = -1; try { KeyValuePair <string, string> phasePair = updatePairs.FirstOrDefault(u => u.Key.ToLower() == "phaseid"); if (phasePair.Value != null) { phaseID = Convert.ToInt16(phasePair.Value); } if (phaseID < -1 || phaseID > 7) { phaseID = -1; } } catch (Exception) { //_simply use default phaseID = -1; } //__do fuzzy word matches if no phase found yet if (phaseID < 0) { string searchString = subject + body; phaseID = Convert.ToInt16(PhaseKeywords.GuessPhase(searchString)); } //__if this is new Project write it to DB if (madeNewProject) { context.Projects.Add(project); context.SaveChanges(); } //__create and record new ProjectUpdate ProjectUpdate projectUpdate = new ProjectUpdate(); projectUpdate.ProjectUpdateID = Guid.NewGuid(); projectUpdate.ProjectID = projectID; projectUpdate.Subject = subject; projectUpdate.Body = body; context.ProjectUpdates.Add(projectUpdate); context.SaveChanges(); //__build and record StatusUpdates from list of Key:Value pairs //__also make sure to update ProjectPhase table for efficient queries later StatusUpdate statusUpdateTemplate = new StatusUpdate(); statusUpdateTemplate.ProjectID = projectID; statusUpdateTemplate.ProjectUpdateID = projectUpdate.ProjectUpdateID; statusUpdateTemplate.PhaseID = phaseID; statusUpdateTemplate.VerticalID = verticalID; //__safety, incase of duplicate keys, combine the values so there is only one entry //___trying to record duplicate keys in the same PackageUpdate will cause primary key error in DB Dictionary <string, string> cleanedPairs = combineEqualKeys(updatePairs); foreach (var pair in cleanedPairs) { string key = pair.Key; string value = pair.Value; StatusUpdate statusUpdate = statusUpdateTemplate.Clone(); statusUpdate.UpdateKey = key; statusUpdate.UpdateValue = value; statusUpdate.RecordDate = DateTime.Now; context.StatusUpdates.Add(statusUpdate); context.SaveChanges(); updateProjectPhase(projectID, phaseID, key); } return(projectID.ToString()); }
static void Main(string[] args) { if (inDebug) { AccessService dbService = new AccessService(); // var projectUpdates = dbService.GetProjectUpdates("0a9514be-0e61-4ffc-9d7b-8e151a126038"); UpdatePackage package = new UpdatePackage(); package.ProjectName = "we done testing"; package.Subject = "Deployment"; package.Body = "Environment:br549|Jimmy, toloose"; package.Updates.Add("VerticalID", "-1"); package.Updates.Add( "PhaseID", "0"); package.Updates.Add( "Environment", "Joe's Computer"); package.Updates.Add("Some Key","Some Value" ); dbService.RecordUpdatePackage(package); var db = 1; } //AccessService dataAccess = new AccessService(); int actionOption = 1; while (actionOption > 0) { Console.WriteLine("Select action to take:"); Console.WriteLine("--> 1) Clear all data"); Console.WriteLine("--> 2) Create sample data"); Console.WriteLine("--> 3) Delete Project by ID"); Console.WriteLine("--> 4) Delete Project by Name"); Console.WriteLine("--> 5) Exit application"); Console.WriteLine("??\n"); try { string input = Console.ReadLine(); actionOption = Convert.ToInt16(input); } catch (Exception) { Console.WriteLine("Integers only please"); Console.WriteLine("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n"); continue; } bool success = false; switch (actionOption) { case 1: success = deleteAllData(); if (!success) { Console.WriteLine("Problem deleting data: " + errorMessage); errorMessage = ""; } break; case 2: success = writeSampleData(); if (!success) { Console.WriteLine("Problem writing sample data: " + errorMessage); errorMessage = ""; } break; case 3: Console.WriteLine("Enter ProjectID Guid"); string projectID = Console.ReadLine(); try { deleteProject(projectID, null); } catch (Exception e) { Console.WriteLine("Error deleting project, " + e.Message); continue; } break; case 4: Console.WriteLine("Enter Project Name"); string projectName = Console.ReadLine(); try { deleteProject(null, projectName); } catch (Exception e) { Console.WriteLine("Error deleting project, " + e.Message); continue; } break; case 5: return; default: return; } success = false; } }
public void DeleteProjectTest() { AccessService dbService = new AccessService(); //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6"); UpdatePackage package = new UpdatePackage(); package.ProjectName = "Test Project"; package.Subject = "Deployment"; package.Body = "Environment:br549|Jimmy, toloose"; package.Updates.Add("verticalID", "3"); package.Updates.Add("Environment", "br549"); package.Updates.Add("Author", "Samantha"); package.Updates.Add("Manager", "Bocephus"); //__Adding this package should create a new Project and return the ProjectID as string string stId = dbService.RecordUpdatePackage(package); Assert.IsFalse(string.IsNullOrEmpty(stId)); Guid projectID = Guid.Parse(stId); Assert.IsFalse(projectID == Guid.Empty); Guid recordedId = dbService.GetProjectIDbyName(package.ProjectName); Assert.AreEqual(projectID, recordedId); // This is the actual test - let's see if it actually deletes the project dbService.DeleteProject(projectID); // When we look for updates, it should be null or empty. // We will not test this part because the code crashes if you try and // delete a project that does not exist and we are in code freeze. // Assert.IsNull(dbService.GetAllUpdatesForProject(projectID.ToString())); }
public void UpdateProjectVerticalTest() { AccessService dbService = new AccessService(); //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6"); UpdatePackage package = new UpdatePackage(); package.ProjectName = "Test Getting Project Updates"; package.Subject = "Deployment"; package.Body = "Environment:br549|Jimmy, toloose"; package.Updates.Add("verticalID", "3"); package.Updates.Add("Environment", "br549"); package.Updates.Add("Author", "Samantha"); package.Updates.Add("Manager", "Bocephus"); //__Adding this package should create a new Project and return the ProjectID as string string stId = dbService.RecordUpdatePackage(package); Guid projectID = Guid.Parse(stId); // In theory there should be an easy way to check a project vertical, but there isn't //now the actual test dbService.UpdateProjectVertical(5, projectID); List<ProjectUpdate> pjUpdates = dbService.GetProjectUpdates(stId); Assert.IsTrue(pjUpdates[0].Project.VerticalID == 5); dbService.UpdateProjectVertical(7, projectID); List<ProjectUpdate> pjUpdates2 = dbService.GetProjectUpdates(stId); Assert.IsTrue(pjUpdates2[0].Project.VerticalID == 7); dbService.DeleteProject(projectID); }
public void ChangeProjectUpdatePhaseTest1() { AccessService dbService = new AccessService(); //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6"); UpdatePackage package = new UpdatePackage(); package.ProjectName = "Test Getting Project Updates"; package.Subject = "Deployment"; package.Body = "Environment:br549|Jimmy, toloose"; package.Updates.Add("verticalID", "3"); package.Updates.Add("Environment", "br549"); package.Updates.Add("Author", "Samantha"); package.Updates.Add("Manager", "Bocephus"); //__Adding this package should create a new Project and return the ProjectID as string string stId = dbService.RecordUpdatePackage(package); Guid projectID = Guid.Parse(stId); // Gotta convert this to a Project Update as opposed to a plain Update Project List<ProjectUpdate> pjUpdates = dbService.GetProjectUpdates(stId); pjUpdates[0].PhaseID = 4; pjUpdates[0].Phase = "Build_and_Test"; // Don't think this needs to be done dbService.ChangeProjectUpdatePhase(pjUpdates[0]); List<ProjectUpdate> pjUpdateChanges = dbService.GetProjectUpdates(stId); Assert.IsTrue(pjUpdateChanges[0].PhaseID == 4); pjUpdateChanges[0].PhaseID = 5; dbService.ChangeProjectUpdatePhase(pjUpdateChanges[0]); List<ProjectUpdate> pjUpdateChangesMore = dbService.GetProjectUpdates(stId); Assert.IsTrue(pjUpdateChangesMore[0].PhaseID == 5); dbService.DeleteProject(projectID); }
public void GetAllUpdatesFromEmailTest() { AccessService dbService = new AccessService(); UpdatePackage package = new UpdatePackage(); package.ProjectName = "Test Get All Updates from Email"; package.Subject = "Deployment"; package.Body = "Environment:br549|Jimmy, toloose"; package.Updates.Add("verticalID", "3"); package.Updates.Add("Environment", "br549"); package.Updates.Add("Author", "Samantha"); package.Updates.Add("Manager", "Bocephus"); //__Adding this package should create a new Project and return the ProjectID as string string stId = dbService.RecordUpdatePackage(package); Guid projectID = Guid.Parse(stId); List<ProjectUpdate> pUpdate = dbService.GetProjectUpdates(stId); Assert.AreEqual(dbService.GetAllUpdatesFromEmail(pUpdate[0].ProjectUpdateID).Count, 4); dbService.DeleteProject(projectID); }
public void GetUpdatesForKeyTest() { AccessService dbService = new AccessService(); //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6"); UpdatePackage package = new UpdatePackage(); package.ProjectName = "Test retrieving key Project Updates"; package.Subject = "Deployment"; package.Body = "Environment:br549|Jimmy, toloose"; package.Updates.Add("SuperDuperKeyTest", "13504"); package.Updates.Add("SuperDuperKeyTest2", "hello world"); //__Adding this package should create a new Project and return the ProjectID as string string stId = dbService.RecordUpdatePackage(package); //List<ProjectUpdate> list = dbService.GetProjectUpdates(stId); //Assert.AreEqual(list[0].StatusUpdates.Count, 4); Guid projectID = Guid.Parse(stId); List<StatusUpdate> statusUpdates = dbService.GetUpdatesForKey("SuperDuperKeyTest", projectID); Assert.IsTrue(statusUpdates[0].UpdateValue == "13504"); dbService.DeleteProject(projectID); }
public void GetProjectUpdatesTest() { AccessService dbService = new AccessService(); //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6"); UpdatePackage package = new UpdatePackage(); package.ProjectName = "Test Getting Project Updates"; package.Subject = "Deployment"; package.Body = "Environment:br549|Jimmy, toloose"; package.Updates.Add("verticalID", "3"); package.Updates.Add("Environment", "br549"); package.Updates.Add("Author", "Samantha"); package.Updates.Add("Manager", "Bocephus"); //__Adding this package should create a new Project and return the ProjectID as string string stId = dbService.RecordUpdatePackage(package); List<ProjectUpdate> list = dbService.GetProjectUpdates(stId); Assert.AreEqual(list[0].StatusUpdates.Count, 4); Guid projectID = Guid.Parse(stId); dbService.DeleteProject(projectID); }
public void RecordUpdatePackageTest() { AccessService dbService = new AccessService(); //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6"); UpdatePackage package = new UpdatePackage(); package.ProjectName = "Test Project"; package.Subject = "Deployment"; package.Body = "Environment:br549|Jimmy, toloose"; package.Updates.Add("verticalID", "3"); package.Updates.Add("Environment", "br549"); package.Updates.Add("Author", "Samantha"); package.Updates.Add("Manager", "Bocephus"); //__Adding this package should create a new Project and return the ProjectID as string string stId = dbService.RecordUpdatePackage(package); Assert.IsFalse(string.IsNullOrEmpty(stId)); Guid projectID = Guid.Parse(stId); Assert.IsFalse(projectID == Guid.Empty); Guid recordedId = dbService.GetProjectIDbyName(package.ProjectName); Assert.AreEqual(projectID, recordedId); dbService.DeleteProject(projectID); }