class TestMembership(unittest.TestCase):
    def setUp(self):
        self.membership = Membership()

    def test_append_new(self):
        self.membership.append("dogs", datetime(2015, 1, 1))
        self.assertTrue(self.membership.contains("dogs"))
        self.assertEqual(datetime(2015, 1, 1),
                         self.membership.join_time("dogs"))

    def test_append_updatetime_new(self):
        self.membership.append("dogs", datetime(2015, 1, 1))
        self.membership.append("dogs", datetime(2014, 1, 1))
        self.assertEqual(datetime(2014, 1, 1),
                         self.membership.join_time("dogs"))

    def test_append_updatetime_unchanged(self):
        self.membership.append("dogs", datetime(2015, 1, 1))
        self.membership.append("dogs", datetime(2016, 1, 1))
        self.assertEqual(datetime(2015, 1, 1),
                         self.membership.join_time("dogs"))

    def test_filter(self):
        self.membership.append("dogs", datetime(2017, 1, 1))
        self.membership.append("cats", datetime(2016, 1, 1))
        self.membership.append("birds", datetime(2016, 1, 2))
        self.membership.filter_before_time(datetime(2016, 2, 1))
        self.assertFalse(self.membership.contains("dogs"))
        self.assertTrue(self.membership.contains("cats"))
        self.assertTrue(self.membership.contains("birds"))