#!/usr/bin/env python # -*- coding: utf-8 -*- """Tests for `lemi_metadata` module.""" import logging import unittest from obspy import UTCDateTime from pathlib import Path from lemi2seed.lemi_data import LemiData from lemi2seed.lemi_metadata import BaseSurvey, Survey, log_file_path OUTPUT_MSEED = Path(__file__).parent.joinpath('MSEED') TEST_DIR = Path(__file__).parent.joinpath('test_data') SCR_DIR = "lemi2seed.lemi_metadata" logging.config.fileConfig(log_file_path) logger = logging.getLogger(SCR_DIR) class TestBaseSurvey(unittest.TestCase): """Test suite for BaseSurvey data class.""" def setUp(self): """Set up test fixtures.""" lemi_data = LemiData(TEST_DIR.joinpath('DATA0110'), OUTPUT_MSEED) lemi_data.prep_data() self.data_stats = lemi_data.stats def test_validate_time_period_start_not_utc(self): """Test basic functionality of validate_time_period_start.""" data_input = self.data_stats['time_period_start'] metadata_input = 2021.167 bs = BaseSurvey() self.assertFalse(bs.validate_time_period_start(metadata_input, data_input)) def test_validate_time_period_start_greater_than_acquisition_start(self): """Test basic functionality of validate_time_period_start.""" data_input = self.data_stats['time_period_start'] metadata_input = UTCDateTime('2020-10-01T00:00:00.000000Z') bs = BaseSurvey() self.assertFalse(bs.validate_time_period_start(metadata_input, data_input)) def test_validate_time_period_start_valid(self): """Test basic functionality of validate_time_period_start.""" data_input = self.data_stats['time_period_start'] metadata_input = UTCDateTime('2020-09-30T00:00:00.000000Z') bs = BaseSurvey() self.assertTrue(bs.validate_time_period_start(metadata_input, data_input)) def test_validate_time_period_end_not_utc(self): """Test basic functionality of validate_time_period_end.""" data_input = self.data_stats['time_period_end'] metadata_input = 2021.167 bs = BaseSurvey() self.assertFalse(bs.validate_time_period_end(metadata_input, data_input)) def test_validate_time_period_end_lower_than_acquisition_end(self): """Test basic functionality of validate_time_period_end.""" data_input = self.data_stats['time_period_end'] metadata_input = UTCDateTime('2020-09-30T00:00:00.000000Z') bs = BaseSurvey() self.assertFalse(bs.validate_time_period_end(metadata_input, data_input)) def test_validate_time_period_end_valid(self): """Test basic functionality of validate_time_period_end.""" data_input = self.data_stats['time_period_end'] metadata_input = UTCDateTime('2020-10-02T00:00:00.000000Z') bs = BaseSurvey() self.assertTrue(bs.validate_time_period_end(metadata_input, data_input)) class TestSurvey(unittest.TestCase): """Test suite for Survey data class.""" def test_validate_archive_network_undefined(self): """Test basic functionality of validate_archive_network.""" with self.assertLogs(logger, level='ERROR') as cmd: Survey.validate_archive_network(None) msg = "The network code should be a string." self.assertEqual(cmd.output, [":".join(['ERROR', SCR_DIR, msg])]) def test_validate_archive_network_erroneous_type(self): """Test basic functionality of validate_archive_network.""" with self.assertLogs(logger, level='ERROR') as cmd: Survey.validate_archive_network(12) msg = "The network code should be a string." self.assertEqual(cmd.output, [":".join(['ERROR', SCR_DIR, msg])]) def test_validate_archive_network_invalid(self): """Test basic functionality of validate_archive_network.""" with self.assertLogs(logger, level='ERROR') as cmd: Survey.validate_archive_network('EMX') msg = "The network code should be two alphanumeric character long." self.assertEqual(cmd.output, [":".join(['ERROR', SCR_DIR, msg])]) def test_validate_archive_network_valid(self): """Test basic functionality of validate_archive_network.""" self.assertTrue(Survey.validate_archive_network('EM')) def test_validate_citation_dataset_doi_undefined(self): """Test basic functionality of validate_citation_dataset_doi.""" with self.assertLogs(logger, level='ERROR') as cmd: Survey.validate_citation_dataset_doi(None) msg = "The DOI number(s) should be a string." self.assertEqual(cmd.output, [":".join(['ERROR', SCR_DIR, msg])]) def test_validate_citation_dataset_doi_erroneous_type(self): """Test basic functionality of validate_citation_dataset_doi.""" with self.assertLogs(logger, level='ERROR') as cmd: Survey.validate_citation_dataset_doi(10.7914) msg = "The DOI number(s) should be a string." self.assertEqual(cmd.output, [":".join(['ERROR', SCR_DIR, msg])]) def test_validate_citation_dataset_doi_invalid_doi(self): """Test basic functionality of validate_citation_dataset_doi.""" with self.assertLogs(logger, level='ERROR') as cmd: Survey.validate_citation_dataset_doi('10.7914/SN/EM') msg = ("Invalid DOI(s). The DOI number(s) provided by the archive " "should be strings formatted as follows: 'scheme: path'.") self.assertEqual(cmd.output, [":".join(['ERROR', SCR_DIR, msg])]) def test_validate_citation_dataset_doi_invalid_dois(self): """Test basic functionality of validate_citation_dataset_doi.""" dois = '10.7914/SN/EM, DOI:10.3421/SN/EG' with self.assertLogs(logger, level='ERROR') as cmd: Survey.validate_citation_dataset_doi(dois) msg = ("Invalid DOI(s). The DOI number(s) provided by the archive " "should be strings formatted as follows: 'scheme: path'.") self.assertEqual(cmd.output, [":".join(['ERROR', SCR_DIR, msg])]) def test_validate_citation_dataset_doi_valid_doi(self): """Test basic functionality of validate_citation_dataset_doi.""" doi = 'DOI:10.7914/SN/EM' self.assertTrue(Survey.validate_citation_dataset_doi(doi)) def test_validate_citation_dataset_doi_valid_dois(self): """Test basic functionality of validate_citation_dataset_doi.""" dois = 'DOI:10.7914/SN/EM, DOI:10.3421/SN/EG' self.assertTrue(Survey.validate_citation_dataset_doi(dois)) def test_validate_project_lead_email_undefined(self): """Test basic functionality of validate_project_lead_email.""" self.assertTrue(Survey.validate_project_lead_email(None)) def test_validate_project_lead_email_erroneous_type(self): """Test basic functionality of validate_project_lead_email.""" with self.assertLogs(logger, level='ERROR') as cmd: Survey.validate_project_lead_email(12) msg = "The project lead email(s) should be a string." self.assertEqual(cmd.output, [":".join(['ERROR', SCR_DIR, msg])]) def test_validate_project_lead_email_invalid_email(self): """Test basic functionality of validate_project_lead_email.""" email = 'mpasscal.edu' self.assertFalse(Survey.validate_project_lead_email(email)) def test_validate_project_lead_email_invalid_emails(self): """Test basic functionality of validate_project_lead_email.""" emails = 'mpasscal.edu, d@passcal.edu' self.assertFalse(Survey.validate_project_lead_email(emails)) def test_validate_project_lead_email_valid_email(self): """Test basic functionality of validate_citation_dataset_doi.""" email = 'm@passcal.edu' self.assertTrue(Survey.validate_project_lead_email(email)) def test_validate_project_lead_email_valid_emails(self): """Test basic functionality of validate_citation_dataset_doi.""" emails = 'm@passcal.edu, d@passcal.edu' self.assertTrue(Survey.validate_project_lead_email(emails))