public void TestMiddleAuthor() { string MedlineData = @"PMID- 14332364 OWN - NLM STAT- OLDMEDLINE DA - 19651101 DCOM- 19961201 LR - 20051116 PUBM- Print IS - 0002-922X (Print) VI - 110 DP - 1965 Sep TI - CONGENITAL SCALP DEFECTS IN TWIN SISTERS. PG - 293-5 FAU - HODGMAN, J E AU - HODGMAN JE FAU - MATHIES, A W Jr AU - MATHIES AW Jr FAU - LEVAN, N E AU - LEVAN NE LA - eng PT - Journal Article PL - UNITED STATES TA - Am J Dis Child JT - American journal of diseases of children (1960) JID - 0370471 SB - OM MH - *Abnormalities MH - *Diseases in Twins MH - *Infant, Newborn MH - *Scalp OTO - NLM OT - *ABNORMALITIES OT - *DISEASES IN TWINS OT - *INFANT, NEWBORN OT - *SCALP EDAT- 1965/09/01 MHDA- 1965/09/01 00:01 PST - ppublish SO - Am J Dis Child. 1965 Sep;110:293-5."; // Add a person to the database Database DB = new Database("Publication Harvester Unit Test"); Person Mathies = new Person("A5703161", "Allan", "W", "MATHIES", false, new String[] { "MATHIES AW Jr" }, "MATHIES AW Jr[au]"); // Create the publication PublicationTypes ptc = new PublicationTypes( AppDomain.CurrentDomain.BaseDirectory + "\\Unit Tests\\TestPublicationTypes", "PublicationTypes.csv" ); Publications Pubs = new Publications(MedlineData, ptc); Assert.IsTrue(Pubs.PublicationList.Length == 1); Publication Pub = Pubs.PublicationList[0]; Assert.IsTrue(Pub.Authors[1] == "MATHIES AW Jr"); // Clear the database Harvester harvester = new Harvester(DB); harvester.CreateTables(); // Write the person and publication to the database // NOTE: The author position is determined in WritePeoplePublicationsToDB() PublicationTypes PubTypes = new PublicationTypes( AppDomain.CurrentDomain.BaseDirectory + "\\Unit Tests\\TestPublicationTypes", "PublicationTypes.csv" ); Mathies.WriteToDB(DB); Publications.WriteToDB(Pub, DB, PubTypes, new string[] { "eng" }); Publications.WritePeoplePublicationsToDB(DB, Mathies, Pub); // Verify that Mathies is the middle author, not the second author Publications PubsFromDB = new Publications(DB, Mathies, false); Assert.IsTrue(PubsFromDB.PublicationList.Length == 1); Assert.IsTrue(PubsFromDB.PublicationList[0].PMID == 14332364); Harvester.AuthorPositions PositionType; Assert.IsTrue(Publications.GetAuthorPosition(DB, 14332364, Mathies, out PositionType, "PeoplePublications") == 2); Assert.IsTrue(PositionType == Harvester.AuthorPositions.Middle); }
public void GetPublications() { // Set up the database TestHarvester.GetPublicationsFromInput1XLS_Using_MockNCBI(false, new string[] { "eng" }, 22); Database DB = new Database("Publication Harvester Unit Test"); PublicationTypes ptc = new PublicationTypes( AppDomain.CurrentDomain.BaseDirectory + "\\Unit Tests\\TestPublicationTypes", "PublicationTypes.csv" ); // Verify the correct publications were written (including publication type and author position) People people = new People(DB); Assert.IsTrue(people.PersonList.Count == 4); int FoundPublications = 0; foreach (Person person in people.PersonList) { Publications pubs = new Publications(DB, person, false); switch (person.Setnb) { case "A6009400": // Van Eys Assert.IsTrue(pubs.PublicationList.Length == 8); if (pubs.PublicationList != null) { foreach (Publication pub in pubs.PublicationList) { switch (pub.PMID) { case 9876482: FoundPublications++; Assert.IsTrue(pub.Title == "Benefits of nutritional intervention on nutritional status, quality of life and survival."); Assert.IsTrue(pub.Pages == "66-8"); Assert.IsTrue(pub.Year == 1998); Assert.IsTrue(pub.Month == null); Assert.IsTrue(pub.Day == null); Assert.IsTrue(pub.Journal == "Int J Cancer Suppl"); Assert.IsTrue(pub.Volume == "11"); Assert.IsTrue(pub.Issue == null); Assert.IsTrue(pub.Authors.Length == 1); Assert.IsTrue(pub.Authors[0] == "Van Eys J"); // Verify publication type Assert.IsTrue(pub.PubType == "Journal Article"); Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 3); // Verify MeSH headings Assert.IsTrue(pub.MeSHHeadings.Count == 8); Assert.IsTrue(pub.MeSHHeadings.Contains("Child")); Assert.IsTrue(pub.MeSHHeadings.Contains("Nutrition Disorders/*complications/*therapy")); Assert.IsTrue(pub.MeSHHeadings.Contains("Survival Rate")); // Verify position type Harvester.AuthorPositions PositionType; int AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications"); Assert.IsTrue(AuthorPosition == 1); Assert.IsTrue(PositionType == Harvester.AuthorPositions.First); AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType); Assert.IsTrue(AuthorPosition == 1); Assert.IsTrue(PositionType == Harvester.AuthorPositions.First); break; case 8403744: FoundPublications++; Assert.IsTrue(pub.Title == "Early hospital discharge and the timing of newborn metabolic screening."); Assert.IsTrue(pub.Pages == "463-6"); Assert.IsTrue(pub.Year == 1993); Assert.IsTrue(pub.Month == "Aug"); Assert.IsTrue(pub.Day == null); Assert.IsTrue(pub.Journal == "Clin Pediatr (Phila)"); Assert.IsTrue(pub.Volume == "32"); Assert.IsTrue(pub.Issue == "8"); Assert.IsTrue(pub.Authors.Length == 4); Assert.IsTrue(pub.Authors[0] == "Coody D"); Assert.IsTrue(pub.Authors[1] == "Yetman RJ"); Assert.IsTrue(pub.Authors[2] == "Montgomery D"); Assert.IsTrue(pub.Authors[3] == "van Eys J"); // Verify publication type Assert.IsTrue(pub.PubType == "Consensus Development Conference, NIH"); Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 1); // Verify MeSH headings Assert.IsTrue(pub.MeSHHeadings.Count == 15); Assert.IsTrue(pub.MeSHHeadings.Contains("Cesarean Section")); Assert.IsTrue(pub.MeSHHeadings.Contains("Hospitals, Private")); Assert.IsTrue(pub.MeSHHeadings.Contains("*Insurance, Health")); Assert.IsTrue(pub.MeSHHeadings.Contains("United States")); // Verify position type AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications"); Assert.IsTrue(AuthorPosition == 4); Assert.IsTrue(PositionType == Harvester.AuthorPositions.Last); AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType); Assert.IsTrue(AuthorPosition == 4); Assert.IsTrue(PositionType == Harvester.AuthorPositions.Last); break; } } } break; case "A5401532": // Tobian Assert.IsTrue(pubs.PublicationList.Length == 5); if (pubs.PublicationList != null) { foreach (Publication pub in pubs.PublicationList) { switch (pub.PMID) { case 9931073: FoundPublications++; Assert.IsTrue(pub.Title == "Story of the birth of the journal called Hypertension."); Assert.IsTrue(pub.Pages == "7"); Assert.IsTrue(pub.Year == 1999); Assert.IsTrue(pub.Month == "Jan"); Assert.IsTrue(pub.Day == null); Assert.IsTrue(pub.Volume == "33"); Assert.IsTrue(pub.Issue == "1"); Assert.IsTrue(pub.Authors.Length == 1); Assert.IsTrue(pub.Authors[0] == "Tobian L"); // Verify publication type Assert.IsTrue(pub.PubType == "Historical Article"); Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 0); // Verify MeSH headings Assert.IsTrue(pub.MeSHHeadings.Count == 5); Assert.IsTrue(pub.MeSHHeadings.Contains("American Heart Association/*history")); Assert.IsTrue(pub.MeSHHeadings.Contains("*Hypertension")); Assert.IsTrue(pub.MeSHHeadings.Contains("United States")); // Verify position type Harvester.AuthorPositions PositionType; int AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications"); Assert.IsTrue(AuthorPosition == 1); Assert.IsTrue(PositionType == Harvester.AuthorPositions.First); AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType); Assert.IsTrue(AuthorPosition == 1); Assert.IsTrue(PositionType == Harvester.AuthorPositions.First); break; } } } break; case "A5501586": // Reemtsma Assert.IsTrue(pubs.PublicationList.Length == 3); if (pubs.PublicationList != null) { foreach (Publication pub in pubs.PublicationList) { switch (pub.PMID) { case 11528018: FoundPublications++; Assert.IsTrue(pub.Title == "Xenotransplantation: A Historical Perspective."); Assert.IsTrue(pub.Pages == "9-12"); Assert.IsTrue(pub.Year == 1995); Assert.IsTrue(pub.Month == null); Assert.IsTrue(pub.Day == null); Assert.IsTrue(pub.Volume == "37"); Assert.IsTrue(pub.Issue == "1"); Assert.IsTrue(pub.Authors.Length == 1); Assert.IsTrue(pub.Authors[0] == "Reemtsma K"); // Verify publication type Assert.IsTrue(pub.PubType == "JOURNAL ARTICLE"); Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 3); // Verify MeSH headings Assert.IsTrue(pub.MeSHHeadings == null); // Verify position type Harvester.AuthorPositions PositionType; int AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications"); Assert.IsTrue(AuthorPosition == 1); Assert.IsTrue(PositionType == Harvester.AuthorPositions.First); AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType); Assert.IsTrue(AuthorPosition == 1); Assert.IsTrue(PositionType == Harvester.AuthorPositions.First); break; } } } break; case "A5702471": // Guillemin Assert.IsTrue(pubs.PublicationList.Length == 6); if (pubs.PublicationList != null) { foreach (Publication pub in pubs.PublicationList) { switch (pub.PMID) { case 15642779: // For this publication, we're just concerned that // the publication type is "Review" -- even though // it's the second publication type in the citation, // it's flagged as an "override first pubtype" // in PublicationTypes.csv Assert.IsTrue(pub.PubType == "Review"); break; // NOTE: The title has a quote (laureates') that gets stripped off case 12462241: FoundPublications++; Assert.IsTrue(pub.Title == "Nobel laureates letter to President Bush."); Assert.IsTrue(pub.Pages == "A02"); Assert.IsTrue(pub.Year == 2001); Assert.IsTrue(pub.Month == "Feb"); Assert.IsTrue(pub.Day == "22"); Assert.IsTrue(pub.Journal == "Washington Post"); Assert.IsTrue(pub.Volume == null); Assert.IsTrue(pub.Issue == null); Assert.IsTrue(pub.Authors.Length == 82); Assert.IsTrue(pub.Authors[0] == "Arrow KJ"); Assert.IsTrue(pub.Authors[26] == "Guillemin R"); Assert.IsTrue(pub.Authors[81] == "Wilson RW"); // Verify publication type Assert.IsTrue(pub.PubType == "Newspaper Article"); Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 0); // Verify MeSH headings Assert.IsTrue(pub.MeSHHeadings.Count == 9); Assert.IsTrue(pub.MeSHHeadings.Contains("Embryo Disposition")); Assert.IsTrue(pub.MeSHHeadings.Contains("National Institutes of Health (U.S.)")); Assert.IsTrue(pub.MeSHHeadings.Contains("United States")); // Verify position type Harvester.AuthorPositions PositionType; int AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications"); Assert.IsTrue(AuthorPosition == 27); Assert.IsTrue(PositionType == Harvester.AuthorPositions.Middle); AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType); Assert.IsTrue(AuthorPosition == 27); Assert.IsTrue(PositionType == Harvester.AuthorPositions.Middle); break; case 3086749: // This publication was altered to contain six GrantIDs in order to // test the GrantID column length in the database FoundPublications++; Assert.IsTrue(pub.Title == "Pituitary FSH is released by a heterodimer of the beta-subunits from the two forms of inhibin."); Assert.IsTrue(pub.Pages == "779-82"); Assert.IsTrue(pub.Year == 1986); Assert.IsTrue(pub.Month == "Jun"); Assert.IsTrue(pub.Day == "19-25"); Assert.IsTrue(pub.Journal == "Nature"); Assert.IsTrue(pub.Volume == "321"); Assert.IsTrue(pub.Issue == "6072"); Assert.IsTrue(pub.Authors.Length == 7); Assert.IsTrue(pub.Authors[0] == "Ling N"); Assert.IsTrue(pub.Authors[4] == "Esch F"); Assert.IsTrue(pub.Authors[6] == "Guillemin R"); // Verify publication type Assert.IsTrue(pub.PubType == "Journal Article"); Assert.IsTrue(ptc.GetCategoryNumber(pub.PubType) == 3); // Verify MeSH headings Assert.IsTrue(pub.MeSHHeadings.Count == 14); Assert.IsTrue(pub.MeSHHeadings.Contains("Amino Acid Sequence")); Assert.IsTrue(pub.MeSHHeadings.Contains("Follicle Stimulating Hormone/*secretion")); Assert.IsTrue(pub.MeSHHeadings.Contains("Swine")); // Verify position type AuthorPosition = Publications.GetAuthorPosition(DB, pub.PMID, person, out PositionType, "PeoplePublications"); Assert.IsTrue(AuthorPosition == 7); Assert.IsTrue(PositionType == Harvester.AuthorPositions.Last); AuthorPosition = person.GetAuthorPosition(DB, pub, out PositionType); Assert.IsTrue(AuthorPosition == 7); Assert.IsTrue(PositionType == Harvester.AuthorPositions.Last); break; } } } break; } } Assert.IsTrue(FoundPublications == 6); // Verify that People.Harvested has been updated for each person DataTable Results = DB.ExecuteQuery("SELECT Setnb, Harvested FROM People"); Assert.IsTrue(Results.Rows.Count == 4); foreach (DataRow Row in Results.Rows) { Assert.IsTrue((bool)Row["Harvested"] == true); } }