Ejemplo n.º 1
0
 def setup_method(self, method):
     mock_backend = MockBackend([
         Fact(
             activity='timetra',
             category='foss',
             since=datetime(2012,5,24, 15,59),
             until=datetime(2012,5,24, 18,38),
             description='Renamed and refactored Timetra: the script becomes a project',
             tags=['in-ekb'],
         ),
         Fact(activity='walk',
              category='errands',
              since=datetime(2013,4,13, 4,28,54),
              until=datetime(2013,4,13, 4,34,23),
              description='walked the dog',
              tags=['with-dog', 'in-ekb'],
              hamster_fact_id=44047,
         )
     ])
     self.storage = Storage(backend=mock_backend)
Ejemplo n.º 2
0
class TestStorage:

    def setup_method(self, method):
        mock_backend = MockBackend([
            Fact(
                activity='timetra',
                category='foss',
                since=datetime(2012,5,24, 15,59),
                until=datetime(2012,5,24, 18,38),
                description='Renamed and refactored Timetra: the script becomes a project',
                tags=['in-ekb'],
            ),
            Fact(activity='walk',
                 category='errands',
                 since=datetime(2013,4,13, 4,28,54),
                 until=datetime(2013,4,13, 4,34,23),
                 description='walked the dog',
                 tags=['with-dog', 'in-ekb'],
                 hamster_fact_id=44047,
            )
        ])
        self.storage = Storage(backend=mock_backend)

    def test_find_facts(self):
        xs = list(self.storage.find())
        assert len(xs) == 2
        assert xs[0].activity == 'timetra'
        assert xs[0].description == 'Renamed and refactored Timetra: the script becomes a project'
        assert xs[0].since == datetime(2012,5,24, 15,59)

        assert xs[1].activity == 'walk'
        assert xs[1].since == datetime(2013,4,13, 4,28,54)

    def test_find_facts_since(self):
        xs = list(self.storage.find(since=datetime(2012,1,1)))
        assert len(xs) == 2

        xs = list(self.storage.find(since=datetime(2013,1,1)))
        assert len(xs) == 1

        xs = list(self.storage.find(since=datetime(2014,1,1)))
        assert len(xs) == 0

    def test_find_facts_until(self):
        xs = list(self.storage.find(until=datetime(2012,1,1)))
        assert len(xs) == 0

        xs = list(self.storage.find(until=datetime(2013,1,1)))
        assert len(xs) == 1

        xs = list(self.storage.find(until=datetime(2014,1,1)))
        assert len(xs) == 2

    def test_find_facts_activity(self):
        xs = list(self.storage.find(activity='whatchamacallit'))
        assert len(xs) == 0

        xs = list(self.storage.find(activity='walk'))
        assert len(xs) == 1
        assert 'with-dog' in xs[0].tags

    def test_find_facts_description(self):
        xs = list(self.storage.find(description='whatchamacallit'))
        assert len(xs) == 0

        xs = list(self.storage.find(description='dog'))
        assert len(xs) == 1

        xs = list(self.storage.find(description='the'))
        assert len(xs) == 2

    def test_find_facts_tags(self):
        xs = list(self.storage.find(tag='whatchamacallit'))
        assert len(xs) == 0

        xs = list(self.storage.find(tag='with-dog'))
        assert len(xs) == 1

        xs = list(self.storage.find(tag='in-ekb'))
        assert len(xs) == 2

    def test_get_fact_latest(self):
        fact = self.storage.get_latest()
        assert fact.activity == 'walk'

    def test_get_fact_by_date_and_time(self):
        f1 = self.storage.get(datetime(2012,5,24, 15,59))
        f2 = self.storage.get(datetime(2013,4,13, 4,28,54))

        assert f1.activity == 'timetra'
        assert f2.activity == 'walk'

    def test_add_fact(self):
        xs = list(self.storage.find())
        assert len(xs) == 2

        self.storage.add(Fact(
            category='leisure',
            activity='party',
            since=datetime(2012,12,31, 23,55),
            until=datetime(2013,1,1, 1,30),
            description='Happy New Year!',
            tags=['with-friends']
        ))

        xs = list(self.storage.find())
        assert len(xs) == 3
        assert xs[-1].activity == 'party'

    def test_update_fact(self):
        xs = list(self.storage.find())
        initial = xs[0]
        assert initial.activity == 'timetra'

        # activity name and start time are enough to identify the fact
        self.storage.update(initial, {'activity': 'argh'})

        xs = list(self.storage.find())
        updated = xs[0]
        assert updated.activity == 'argh'

    def test_delete_fact(self):
        xs = list(self.storage.find())
        assert len(xs) == 2

        # activity name and start time are enough to identify the fact
        spec = Fact(activity='timetra', since=datetime(2012,5,24, 15,59))
        self.storage.delete(spec)

        xs = list(self.storage.find())
        assert len(xs) == 1

    def test_resolve_activity(self):
        "Find a single activity matching given mask"

        with pytest.raises(UnknownActivity) as excinfo:
            self.storage.resolve_activity('x')

        with pytest.raises(AmbiguousActivityName) as excinfo:
            self.storage.resolve_activity('a')
        assert 'timetra' in str(excinfo)
        assert 'walk' in str(excinfo)

        assert self.storage.resolve_activity('wa') == {'category': 'errands', 'activity': 'walk'}

    def test_find_activities(self):
        "Collect distinct activity/category pairs from the data"
        activities = self.storage.get_known_activities()
        assert activities == [
            {'category': 'errands', 'activity': 'walk'},
            {'category': 'foss', 'activity': 'timetra'},
        ]

        self.storage.add(Fact(activity='music', category='create'))
        activities = self.storage.get_known_activities()
        assert activities == [
            {'category': 'create', 'activity': 'music'},
            {'category': 'errands', 'activity': 'walk'},
            {'category': 'foss', 'activity': 'timetra'},
        ]

        # activities with same names can co-exist in different categories
        self.storage.add(Fact(activity='music', category='consume'))
        activities = self.storage.get_known_activities()
        assert activities == [
            {'category': 'consume', 'activity': 'music'},
            {'category': 'create', 'activity': 'music'},
            {'category': 'errands', 'activity': 'walk'},
            {'category': 'foss', 'activity': 'timetra'},
        ]