test_verticalmeanmetersiris.py 3.31 KB
Newer Older
# coding=utf-8
from unittest import TestCase

from earthdiagnostics.diagnostic import DiagnosticVariableOption, DiagnosticOptionError
from earthdiagnostics.box import Box
from earthdiagnostics.general.verticalmeanmetersiris import VerticalMeanMetersIris
from earthdiagnostics.frequency import Frequencies
from mock import Mock, patch

from earthdiagnostics.modelingrealm import ModelingRealms


class TestVerticalMeanMetersIris(TestCase):

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

        self.diags = Mock()
        self.diags.config.experiment.get_chunk_list.return_value = (('20010101', 0, 0), ('20010101', 0, 1))
        self.diags.config.experiment.startdates = ['20010101', ]
        self.diags.config.frequency = Frequencies.monthly

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

    def fake_parse(self, value):
        if not value:
            raise DiagnosticOptionError
        return value

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

        box = Box(True)

        jobs = VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic', 'var'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 0,
                                                         ModelingRealms.ocean, 'var', box))
        self.assertEqual(jobs[1], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 1,
                                                         ModelingRealms.ocean, 'var', box))

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

        jobs = VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic', 'var', '0', '100'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 0,
                                                         ModelingRealms.ocean, 'var', box))
        self.assertEqual(jobs[1], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 1,
                                                         ModelingRealms.ocean, 'var', box))

        jobs = VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic', 'var', '0', '100', 'seaIce'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 0,
                                                         ModelingRealms.seaIce, 'var', box))
        self.assertEqual(jobs[1], VerticalMeanMetersIris(self.data_manager, '20010101', 0, 1,
                                                         ModelingRealms.seaIce, 'var', box))

        with self.assertRaises(DiagnosticOptionError):
            VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic'])

        with self.assertRaises(DiagnosticOptionError):
            VerticalMeanMetersIris.generate_jobs(self.diags, ['diagnostic', 'var', '0', '100', 'seaIce', 'extra'])

    def test_str(self):
        box = Box(True)
        box.min_depth = 0
        box.max_depth = 100
        mixed = VerticalMeanMetersIris(self.data_manager, '20010101', 0, 0, ModelingRealms.atmos, 'var', box)
        self.assertEquals(str(mixed), 'Vertical mean meters Startdate: 20010101 Member: 0 Chunk: 0 Variable: atmos:var '
                                      'Box: 0-100m')