def setUpModule(): """Create test databases in local server""" if not has_couchdb: return server = couchdb.Server() ## Create databases for x in DATABASES: if not server.__contains__(x): LOG.info("Creating database {}".format(x)) server.create(x) ## Create views for flowcells and samples for dbname in DATABASES: dblab = dbname.replace("-test", "") db = server[dbname] for k, v in VIEWS[dblab].items(): for title, view in v.items(): viewdef = ViewDefinition(k, title, view) viewdef.sync(db) ## Create and upload project summary with open(os.path.join(filedir, "data", "config", "project_summary.yaml")) as fh: prj_sum = yaml.load(fh) db = server["samples-test"] p_con = ProjectSummaryConnection(dbname="projects-test", username="******", password="******") for p in prj_sum: prj = ProjectSummaryDocument(**p) p_con.save(prj, key="project_name")
class TestDbConnection(unittest.TestCase): def setUp(self): self.user = "******" self.pw = "pw" self.url = "localhost" self.examples = { "sample": "1_120924_AC003CCCXX_TGACCA", "flowcell": "AC003CCCXX", "project": "J.Doe_00_01" } self.p_con = ProjectSummaryConnection(dbname="projects-test", username=self.user, password=self.pw, url=self.url) def test_connection(self): """Test database connection""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) self.assertEqual(sample_con.url_string, "http://{}:5984".format(self.url)) def test_get_flowcell(self): """Test getting a flowcell for a given sample""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) fc = sample_con.get_entry(self.examples["sample"], "flowcell") self.assertEqual(str(fc), self.examples["flowcell"]) def test_get_sample_ids(self): """Test getting sample ids given flowcell and sample_prj""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) sample_ids = sample_con.get_sample_ids(fc_id=self.examples["flowcell"]) LOG.info("Number of samples before subsetting: " + str(len(sample_ids))) self.assertEqual(len(sample_ids), 5) sample_ids = sample_con.get_sample_ids( fc_id=self.examples["flowcell"], sample_prj=self.examples["project"]) LOG.info("Number of samples after subsetting: " + str(len(sample_ids))) self.assertEqual(len(sample_ids), 2) def test_get_samples(self): """Test getting samples given flowcell and sample_prj.""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) samples = sample_con.get_samples(fc_id=self.examples["flowcell"]) LOG.info("Selecting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 5) samples = sample_con.get_samples(fc_id=self.examples["flowcell"], sample_prj=self.examples["project"]) LOG.info("Selecting on flowcell, subsetting on project: " + str(len(samples))) self.assertEqual(len(samples), 2) samples = sample_con.get_samples(sample_prj=self.examples["project"]) LOG.info("Selecting on project: " + str(len(samples))) self.assertEqual(len(samples), 3) samples = sample_con.get_samples(sample_prj=self.examples["project"], fc_id=self.examples["flowcell"]) LOG.info("Selecting on project, subsetting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 2) def test_get_samples_wrong_info(self): """Test getting samples when either flowcell or project id information is wrong""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) samples = sample_con.get_samples(sample_prj="bogusproject", fc_id=self.examples["flowcell"]) LOG.info("Selecting on bogus project, subsetting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 0) def test_get_project_sample_ids(self): """Test getting project sample ids""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) sample_ids = sample_con.get_sample_ids( sample_prj=self.examples["project"]) sample_names = [sample_con.db.get(x)["name"] for x in sample_ids] self.assertEqual( set(sample_names), set([ '1_120924_AC003CCCXX_TGACCA', '2_120924_AC003CCCXX_ACAGTG', '1_121015_BB002BBBXX_TGACCA' ])) def test_get_latest_library_prep(self): """Test getting latest library prep""" prj = self.p_con.get_entry("J.Doe_00_01") prj['samples']['P001_102']['library_prep']['B'] = { 'sample_run_metrics': { '2_120924_AC003CCCXX_TTGGAA': None } } self.p_con.save(prj) preps = self.p_con.get_latest_library_prep( project_name=self.examples["project"]) srm = [x for l in preps.values() for x in l] # Make sure A prep not in list self.assertNotIn('2_120924_AC003CCCXX_ACAGTG', srm) # Make sure B prep in list self.assertIn('2_120924_AC003CCCXX_TTGGAA', srm) # Reset data prj = self.p_con.get_entry("J.Doe_00_01") del prj['samples']['P001_102']['library_prep']['B'] self.p_con.save(prj) def test_get_barcode_lane_statistics(self): """Test getting barcode lane statistics from flowcell database""" fc_con = FlowcellRunMetricsConnection(dbname="flowcells-test", username="******", password="******") # Try getting wrong sample name, should return None data = fc_con.get_barcode_lane_statistics("J.Doe_00_01", "P001_101_index6", "120924_AC003CCCXX", "1") self.assertEqual(data, (None, None)) data = fc_con.get_barcode_lane_statistics("J.Doe_00_01", "P001_101_index3", "120924_AC003CCCXX", "1") self.assertEqual(data, (u'35.22', u'90.05'))
class TestDbConnection(unittest.TestCase): def setUp(self): self.user = "******" self.pw = "pw" self.url = "localhost" self.examples = {"sample": "1_120924_AC003CCCXX_TGACCA", "flowcell": "AC003CCCXX", "project": "J.Doe_00_01"} self.p_con = ProjectSummaryConnection( dbname="projects-test", username=self.user, password=self.pw, url=self.url ) def test_connection(self): """Test database connection""" sample_con = SampleRunMetricsConnection( dbname="samples-test", username=self.user, password=self.pw, url=self.url ) self.assertEqual(sample_con.url_string, "http://{}:5984".format(self.url)) def test_get_flowcell(self): """Test getting a flowcell for a given sample""" sample_con = SampleRunMetricsConnection( dbname="samples-test", username=self.user, password=self.pw, url=self.url ) fc = sample_con.get_entry(self.examples["sample"], "flowcell") self.assertEqual(str(fc), self.examples["flowcell"]) def test_get_sample_ids(self): """Test getting sample ids given flowcell and sample_prj""" sample_con = SampleRunMetricsConnection( dbname="samples-test", username=self.user, password=self.pw, url=self.url ) sample_ids = sample_con.get_sample_ids(fc_id=self.examples["flowcell"]) LOG.info("Number of samples before subsetting: " + str(len(sample_ids))) self.assertEqual(len(sample_ids), 4) sample_ids = sample_con.get_sample_ids(fc_id=self.examples["flowcell"], sample_prj=self.examples["project"]) LOG.info("Number of samples after subsetting: " + str(len(sample_ids))) self.assertEqual(len(sample_ids), 2) def test_get_samples(self): """Test getting samples given flowcell and sample_prj.""" sample_con = SampleRunMetricsConnection( dbname="samples-test", username=self.user, password=self.pw, url=self.url ) samples = sample_con.get_samples(fc_id=self.examples["flowcell"]) LOG.info("Selecting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 4) samples = sample_con.get_samples(fc_id=self.examples["flowcell"], sample_prj=self.examples["project"]) LOG.info("Selecting on flowcell, subsetting on project: " + str(len(samples))) self.assertEqual(len(samples), 2) samples = sample_con.get_samples(sample_prj=self.examples["project"]) LOG.info("Selecting on project: " + str(len(samples))) self.assertEqual(len(samples), 3) samples = sample_con.get_samples(sample_prj=self.examples["project"], fc_id=self.examples["flowcell"]) LOG.info("Selecting on project, subsetting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 2) def test_get_samples_wrong_info(self): """Test getting samples when either flowcell or project id information is wrong""" sample_con = SampleRunMetricsConnection( dbname="samples-test", username=self.user, password=self.pw, url=self.url ) samples = sample_con.get_samples(sample_prj="bogusproject", fc_id=self.examples["flowcell"]) LOG.info("Selecting on bogus project, subsetting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 0) def test_get_project_sample_ids(self): """Test getting project sample ids""" sample_con = SampleRunMetricsConnection( dbname="samples-test", username=self.user, password=self.pw, url=self.url ) sample_ids = sample_con.get_sample_ids(sample_prj=self.examples["project"]) sample_names = [sample_con.db.get(x)["name"] for x in sample_ids] self.assertEqual( set(sample_names), set(["1_120924_AC003CCCXX_TGACCA", "2_120924_AC003CCCXX_ACAGTG", "1_121015_BB002BBBXX_TGACCA"]), ) def test_get_latest_library_prep(self): """Test getting latest library prep""" prj = self.p_con.get_entry("J.Doe_00_01") prj["samples"]["P001_102"]["library_prep"]["B"] = {"sample_run_metrics": {"2_120924_AC003CCCXX_TTGGAA": None}} self.p_con.save(prj) preps = self.p_con.get_latest_library_prep(project_name=self.examples["project"]) srm = [x for l in preps.values() for x in l] # Make sure A prep not in list self.assertNotIn("2_120924_AC003CCCXX_ACAGTG", srm) # Make sure B prep in list self.assertIn("2_120924_AC003CCCXX_TTGGAA", srm) # Reset data prj = self.p_con.get_entry("J.Doe_00_01") del prj["samples"]["P001_102"]["library_prep"]["B"] self.p_con.save(prj)
class TestDbConnection(unittest.TestCase): def setUp(self): self.user = "******" self.pw = "pw" self.url = "localhost" self.examples = {"sample":"1_120924_AC003CCCXX_TGACCA", "flowcell":"AC003CCCXX", "project":"J.Doe_00_01"} self.p_con = ProjectSummaryConnection(dbname="projects-test", username=self.user, password=self.pw, url=self.url) def test_connection(self): """Test database connection""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) self.assertEqual(sample_con.url_string, "http://{}:5984".format(self.url)) def test_get_flowcell(self): """Test getting a flowcell for a given sample""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) fc = sample_con.get_entry(self.examples["sample"], "flowcell") self.assertEqual(str(fc), self.examples["flowcell"]) def test_get_sample_ids(self): """Test getting sample ids given flowcell and sample_prj""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) sample_ids = sample_con.get_sample_ids(fc_id=self.examples["flowcell"]) LOG.info("Number of samples before subsetting: " + str(len(sample_ids))) self.assertEqual(len(sample_ids), 5) sample_ids = sample_con.get_sample_ids(fc_id=self.examples["flowcell"], sample_prj=self.examples["project"]) LOG.info( "Number of samples after subsetting: " + str(len(sample_ids))) self.assertEqual(len(sample_ids), 2) def test_get_samples(self): """Test getting samples given flowcell and sample_prj.""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) samples = sample_con.get_samples(fc_id=self.examples["flowcell"]) LOG.info("Selecting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 5) samples = sample_con.get_samples(fc_id=self.examples["flowcell"], sample_prj=self.examples["project"]) LOG.info("Selecting on flowcell, subsetting on project: " + str(len(samples))) self.assertEqual(len(samples), 2) samples = sample_con.get_samples(sample_prj=self.examples["project"]) LOG.info("Selecting on project: " + str(len(samples))) self.assertEqual(len(samples), 3) samples = sample_con.get_samples(sample_prj=self.examples["project"], fc_id=self.examples["flowcell"]) LOG.info("Selecting on project, subsetting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 2) def test_get_samples_wrong_info(self): """Test getting samples when either flowcell or project id information is wrong""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) samples = sample_con.get_samples(sample_prj="bogusproject", fc_id=self.examples["flowcell"]) LOG.info("Selecting on bogus project, subsetting on flowcell: " + str(len(samples))) self.assertEqual(len(samples), 0) def test_get_project_sample_ids(self): """Test getting project sample ids""" sample_con = SampleRunMetricsConnection(dbname="samples-test", username=self.user, password=self.pw, url=self.url) sample_ids = sample_con.get_sample_ids(sample_prj=self.examples["project"]) sample_names = [sample_con.db.get(x)["name"] for x in sample_ids] self.assertEqual(set(sample_names) , set(['1_120924_AC003CCCXX_TGACCA', '2_120924_AC003CCCXX_ACAGTG', '1_121015_BB002BBBXX_TGACCA'])) def test_get_latest_library_prep(self): """Test getting latest library prep""" prj = self.p_con.get_entry("J.Doe_00_01") prj['samples']['P001_102']['library_prep']['B'] = {'sample_run_metrics': {'2_120924_AC003CCCXX_TTGGAA': None}} self.p_con.save(prj) preps = self.p_con.get_latest_library_prep(project_name=self.examples["project"]) srm = [x for l in preps.values() for x in l] # Make sure A prep not in list self.assertNotIn('2_120924_AC003CCCXX_ACAGTG', srm) # Make sure B prep in list self.assertIn('2_120924_AC003CCCXX_TTGGAA', srm) # Reset data prj = self.p_con.get_entry("J.Doe_00_01") del prj['samples']['P001_102']['library_prep']['B'] self.p_con.save(prj) def test_get_barcode_lane_statistics(self): """Test getting barcode lane statistics from flowcell database""" fc_con = FlowcellRunMetricsConnection(dbname="flowcells-test", username="******", password="******") # Try getting wrong sample name, should return None data = fc_con.get_barcode_lane_statistics("J.Doe_00_01", "P001_101_index6", "120924_AC003CCCXX", "1") self.assertEqual(data, (None, None)) data = fc_con.get_barcode_lane_statistics("J.Doe_00_01", "P001_101_index3", "120924_AC003CCCXX", "1") self.assertEqual(data, (u'35.22', u'90.05'))