test_dailymean.py 2.41 KB
Newer Older
# coding=utf-8
from unittest import TestCase

from earthdiagnostics.diagnostic import DiagnosticVariableOption
from earthdiagnostics.box import Box
from earthdiagnostics.frequency import Frequencies
from earthdiagnostics.general.dailymean import DailyMean
from mock import Mock, patch

from earthdiagnostics.modelingrealm import ModelingRealms


class TestDailyMean(TestCase):

    def setUp(self):
        self.data_manager = Mock()

        self.diags = Mock()
        self.diags.model_version = 'model_version'
        self.diags.config.experiment.get_chunk_list.return_value = (('20010101', 0, 0), ('20010101', 0, 1))

        self.box = Box()
        self.box.min_depth = 0
        self.box.max_depth = 100

    def fake_parse(self, value):
        return value

    @patch.object(DiagnosticVariableOption, 'parse', fake_parse)
    def test_generate_jobs(self):

        jobs = DailyMean.generate_jobs(self.diags, ['diagnostic', 'atmos', 'var', '6hr'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], DailyMean(self.data_manager, '20010101', 0, 0, ModelingRealms.atmos, 'var',
                                              Frequencies.six_hourly, ''))
        self.assertEqual(jobs[1], DailyMean(self.data_manager, '20010101', 0, 1, ModelingRealms.atmos, 'var',
                                              Frequencies.six_hourly, ''))

        jobs = DailyMean.generate_jobs(self.diags, ['diagnostic', 'seaice', 'var', '3h', 'grid'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], DailyMean(self.data_manager, '20010101', 0, 0, ModelingRealms.seaIce, 'var',
                                            Frequencies.three_hourly, 'grid'))
        self.assertEqual(jobs[1], DailyMean(self.data_manager, '20010101', 0, 1, ModelingRealms.seaIce, 'var',
                                            Frequencies.three_hourly, 'grid'))

        with self.assertRaises(Exception):
            DailyMean.generate_jobs(self.diags, ['diagnostic'])

        with self.assertRaises(Exception):
            DailyMean.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0'])

    def test_str(self):
        mixed = DailyMean(self.data_manager, '20000101', 1, 1, ModelingRealms.ocean, 'var', 'freq', '')
        self.assertEquals(str(mixed), 'Calculate daily mean Startdate: 20000101 Member: 1 Chunk: 1 '
                                           'Variable: ocean:var Original frequency: freq Grid: ')