public void TestColleaguesSetUp() { // Create the AAMC roster object roster = new Roster(AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestRoster\\testroster.csv"); // Stuff for GetPublications() // Make an anonymous callback function that keeps track of the callback data Harvester.GetPublicationsStatus StatusCallback = delegate(int number, int total, int averageTime) { // }; // Make an anonymous callback function to do nothing for GetPublicationsMessage Harvester.GetPublicationsMessage MessageCallback = delegate(string Message, bool StatusBarOnly) { // }; // Make an anonymous callback function to return false for CheckForInterrupt Harvester.CheckForInterrupt InterruptCallback = delegate() { return(false); }; double AverageMilliseconds; // Read the people file People PeopleFromFile = new People( AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestColleagues", "PeopleFile.xls"); // Drop all tables from the test database DB = new Database("Colleague Generator Unit Test"); foreach (string Table in new string[] { "colleaguepublications", "colleagues", "meshheadings", "people", "peoplepublications", "publicationauthors", "publicationgrants", "publicationmeshheadings", "publications", "pubtypecategories", "starcolleagues" } ) { DB.ExecuteNonQuery("DROP TABLE IF EXISTS " + Table + ";"); } // Create the test database harvester = new Harvester(DB); harvester.CreateTables(); ColleagueFinder.CreateTables(DB); // Populate it using the Mock NCBI object ncbi = new MockNCBI("Medline"); PubTypes = new PublicationTypes( AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestColleagues", "PublicationTypes.csv" ); // Write each person and his publications to the database foreach (Person person in PeopleFromFile.PersonList) { person.WriteToDB(DB); harvester.GetPublications(ncbi, PubTypes, person, StatusCallback, MessageCallback, InterruptCallback, out AverageMilliseconds); } }
/// <summary> /// Use the tests from TestColleagues to set up the database, /// then find the colleagues, get their publications and /// remove false colleagues. /// /// This is a static void so that it can be called by other tests. /// </summary> public static void DoSetUp(out Database DB, out Harvester harvester, out PublicationTypes PubTypes, out NCBI ncbi, string[] Languages) { // First recreate the database DB = new Database("Colleague Generator Unit Test"); ColleagueFinder.CreateTables(DB); // Then use the test fixture setup in TestColleagues to populate it TestColleagues testColleagues = new TestColleagues(); testColleagues.TestColleaguesSetUp(); // Write the publication types to the database PubTypes = new PublicationTypes( AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestColleagues", "PublicationTypes.csv" ); PubTypes.WriteToDB(DB); // Create the other objects from the database harvester = new Harvester(DB); Roster roster = new Roster(AppDomain.CurrentDomain.BaseDirectory + "\\Test Data\\TestRoster\\testroster.csv"); ncbi = new MockNCBI("Medline"); // Find the colleagues and publications ColleagueFinder finder = new ColleagueFinder(DB, roster, ncbi, null); People people = new People(DB); foreach (Person person in people.PersonList) { Person[] found = finder.FindPotentialColleagues(person); if (found != null) { finder.GetColleaguePublications(found, new string[] { "eng" }, new List <int> { 1, 2, 3 }); } } // Remove false colleagues ColleagueFinder.RemoveFalseColleagues(DB, null, "PeoplePublications"); // Create the extra articles for Bunn and Tobian. // Verify that Bunn and Tobian have five articles in common, with years // ranging from 1993 to 2001. CreateExtraArticlesForTobianAndBunn(DB, PubTypes, Languages); DataTable Result = DB.ExecuteQuery( @"SELECT p.Year, p.PMID, pp.PositionType AS StarPositionType, cp.PositionType AS ColleaguePositionType, p.Journal FROM Publications p, ColleaguePublications cp, PeoplePublications pp WHERE pp.Setnb = 'A5401532' AND cp.Setnb = 'A4800524' AND p.PMID = pp.PMID AND p.PMID = cp.PMID ORDER BY p.Year ASC"); Assert.AreEqual(Result.Rows.Count, 5); Assert.AreEqual(Result.Rows[0]["Year"], 1993); Assert.AreEqual(Result.Rows[4]["Year"], 2001); }
public void GetColleaguesForTobian() { // We've seeded Tobian.dat with colleagues: // Paul A. Bunn is in PMID 8931843. He has two articles in OtherPeople.dat, including // article 8931843. (Also, PMID 15451956) ColleagueFinder finder = new ColleagueFinder(DB, roster, ncbi, null); People people = new People(DB); Person[] found; foreach (Person person in people.PersonList) { // Only look for a star's colleagues we've seeded that star's colleagues in the DAT files switch (person.Last) { case "Tobian": // Tobian has two apparent colleagues. Paul Bunn is a true colleague // who has publications in common with Tobian. Sharon J. Bintliff // is a false colleague with no common publications. found = finder.FindPotentialColleagues(person); Assert.AreEqual(found.Length, 2); Person PaulBunn = found[0]; Assert.AreEqual(PaulBunn.Setnb, "A4800524"); Assert.AreEqual(PaulBunn.Last, "BUNN"); Assert.AreEqual(PaulBunn.First, "PAUL"); Assert.AreEqual(PaulBunn.Middle, "A."); Assert.AreEqual(PaulBunn.Names.Length, 4); Assert.AreEqual(PaulBunn.Names[0], "bunn p jr"); Assert.AreEqual(PaulBunn.Names[1], "bunn pa jr"); Assert.AreEqual(PaulBunn.Names[2], "bunn pa"); Assert.AreEqual(PaulBunn.Names[3], "bunn p"); Assert.AreEqual(PaulBunn.MedlineSearch, "((\"bunn pa jr\"[au] or \"bunn p jr\"[au]) or ((\"bunn p\"[au] or \"bunn pa\"[au]) and (lymphoma or cancer)) and 1970:2005[dp])"); Person SharonBintliff = found[1]; Assert.AreEqual(SharonBintliff.Setnb, "A2700156"); Assert.AreEqual(SharonBintliff.Last, "BINTLIFF"); Assert.AreEqual(SharonBintliff.First, "SHARON"); Assert.AreEqual(SharonBintliff.Middle, "J"); Assert.AreEqual(SharonBintliff.Names.Length, 1); Assert.AreEqual(SharonBintliff.Names[0], "bintliff sj"); Assert.AreEqual(SharonBintliff.MedlineSearch, "\"bintliff sj\"[au]"); // Make sure that Paul and Sharon were really added as a colleague DataTable result = DB.ExecuteQuery("SELECT StarSetnb, Setnb FROM StarColleagues ORDER BY Setnb DESC"); Assert.AreEqual(result.Rows.Count, 2); DataRow row = result.Rows[0]; Assert.AreEqual(row[0].ToString(), "A5401532"); Assert.AreEqual(row[1].ToString(), "A4800524"); row = result.Rows[1]; Assert.AreEqual(row[0].ToString(), "A5401532"); Assert.AreEqual(row[1].ToString(), "A2700156"); // Get the colleague's publications, make sure they're written to the database finder.GetColleaguePublications(found, new string[] { "eng" }, new List <int> { 0, 1, 2, 3, 4, 5, 6 }); Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM Colleagues"), 2); Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM StarColleagues"), 2); Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM ColleaguePublications"), 2); Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM ColleaguePublications WHERE PMID = 8931843"), 1); Assert.AreEqual(DB.GetIntValue("SELECT Count(*) FROM ColleaguePublications WHERE PMID = 15451956"), 1); // Remove false colleagues, make sure Sharon was deleted ColleagueFinder.RemoveFalseColleagues(DB, null, "PeoplePublications"); result = DB.ExecuteQuery("SELECT StarSetnb, Setnb FROM StarColleagues ORDER BY Setnb DESC"); Assert.AreEqual(result.Rows.Count, 1); row = result.Rows[0]; Assert.AreEqual(row[0].ToString(), "A5401532"); Assert.AreEqual(row[1].ToString(), "A4800524"); break; } } }
/// <summary> /// Add five extra articles to the database for Tobian and Bunn /// </summary> public static void CreateExtraArticlesForTobianAndBunn(Database DB, PublicationTypes PubTypes, string[] Languages) { // Create people objects for Tobian and Bunn Person Tobian = new Person("A5401532", "Louis", "", "Tobian", true, new String[] { "tobian l", "tobian l jr", "tobian lj" }, "(\"tobian l\"[au] OR \"tobian l jr\"[au] OR \"tobian lj\"[au])"); Person Bunn = new Person("A4800524", "PAUL", "A.", "BUNN", true, new String[] { "bunn p jr", "bunn pa jr", "bunn pa", "bunn p" }, "((\"bunn pa jr\"[au] or \"bunn p jr\"[au]) or ((\"bunn p\"[au] or \"bunn pa\"[au]) and (lymphoma or cancer)) and 1970:2005[dp])"); // First, add a few more publications to the colleague. Publication pub = new Publication(); string[] Authors = new String[] { "TOBIAN L", "BUNN P" }; pub.Year = 1993; pub.Journal = "Fake Journal"; pub.Authors = Authors; pub.PMID = 22222222; pub.Title = "Fake article #1"; pub.Language = "eng"; pub.PubType = "Journal Article"; Publications.WriteToDB(pub, DB, PubTypes, Languages); Publications.WritePeoplePublicationsToDB(DB, Tobian, pub); ColleagueFinder.WriteColleaguePublicationsToDB(DB, Bunn, pub, PubTypes, new string[] { "eng" }); pub = new Publication(); Authors = new String[] { "BUNN P", "TOBIAN L" }; pub.Year = 1996; pub.Journal = "Xenotransplantation"; pub.Authors = Authors; pub.PMID = 12345678; pub.Title = "Fake article #2"; pub.Language = "eng"; pub.PubType = "Journal Article"; Publications.WriteToDB(pub, DB, PubTypes, Languages); Publications.WritePeoplePublicationsToDB(DB, Tobian, pub); ColleagueFinder.WriteColleaguePublicationsToDB(DB, Bunn, pub, PubTypes, new string[] { "eng" }); pub = new Publication(); Authors = new String[] { "TOBIAN L", "BUNN P" }; pub.Year = 1996; pub.Journal = "Fake Journal"; pub.Authors = Authors; pub.PMID = 98765432; pub.Title = "Fake article #3"; pub.Language = "eng"; pub.PubType = "Journal Article"; Publications.WriteToDB(pub, DB, PubTypes, Languages); Publications.WritePeoplePublicationsToDB(DB, Tobian, pub); ColleagueFinder.WriteColleaguePublicationsToDB(DB, Bunn, pub, PubTypes, new string[] { "eng" }); pub = new Publication(); Authors = new String[] { "TOBIAN L", "BUNN P", "SCHMOE J" }; pub.Year = 2001; pub.Journal = "Nature"; pub.Authors = Authors; pub.PMID = 55555555; pub.Title = "Fake article #4"; pub.Language = "eng"; pub.PubType = "Journal Article"; Publications.WriteToDB(pub, DB, PubTypes, Languages); Publications.WritePeoplePublicationsToDB(DB, Tobian, pub); ColleagueFinder.WriteColleaguePublicationsToDB(DB, Bunn, pub, PubTypes, new string[] { "eng" }); }