def test_gen_stats_different_years(self): current_year = datetime_to_lectureyear(date.today()) # postgres does not define random access directly on unsorted querysets members = [member for member in Member.objects.all()] # one first year student m = members[0] m.profile.starting_year = current_year m.profile.save() # one second year student m = members[1] m.profile.starting_year = current_year - 1 m.profile.save() # no third year students # one fourth year student m = members[2] m.profile.starting_year = current_year - 3 m.profile.save() # no fifth year students # one >5 year student m = members[3] m.profile.starting_year = current_year - 5 m.profile.save() # 4 active members result = gen_stats_year() self.assertEqual(4, self.sum_members(result)) self.assertEqual(4, self.sum_members(result, Membership.MEMBER)) # one first year student self.assertEqual(1, result["2019"][Membership.MEMBER]) # one second year student self.assertEqual(1, result["2018"][Membership.MEMBER]) # no third year students self.assertEqual(0, result["2017"][Membership.MEMBER]) # one fourth year student self.assertEqual(1, result["2016"][Membership.MEMBER]) # no fifth year students self.assertEqual(0, result["2015"][Membership.MEMBER]) # one >5 year student self.assertEqual(1, result["Older"][Membership.MEMBER])
def test_gen_stats_active(self): """ Testing if active and non-active objects are counted correctly """ current_year = datetime_to_lectureyear(date.today()) # Set start date to current year - 1: for m in Member.objects.all(): m.profile.starting_year = current_year - 1 m.profile.save() result = gen_stats_year() self.assertEqual(10, self.sum_members(result)) self.assertEqual(10, self.sum_members(result, Membership.MEMBER)) result = {k: v for k, v in gen_stats_member_type().items()} self.assertEqual(10, self.sum_member_types(result)) # Change one membership to benefactor should decrease amount of members m = Membership.objects.all()[0] m.type = Membership.BENEFACTOR m.save() result = gen_stats_year() self.assertEqual(10, self.sum_members(result)) self.assertEqual(9, self.sum_members(result, Membership.MEMBER)) self.assertEqual(1, self.sum_members(result, Membership.BENEFACTOR)) result = {k: v for k, v in gen_stats_member_type().items()} self.assertEqual(10, self.sum_member_types(result)) self.assertEqual(9, result[Membership.MEMBERSHIP_TYPES[0][1]]) self.assertEqual(1, result[Membership.MEMBERSHIP_TYPES[1][1]]) # Same for honorary members m = Membership.objects.all()[1] m.type = Membership.HONORARY m.save() result = gen_stats_year() self.assertEqual(10, self.sum_members(result)) self.assertEqual(8, self.sum_members(result, Membership.MEMBER)) self.assertEqual(1, self.sum_members(result, Membership.BENEFACTOR)) self.assertEqual(1, self.sum_members(result, Membership.HONORARY)) result = {k: v for k, v in gen_stats_member_type().items()} self.assertEqual(10, self.sum_member_types(result)) self.assertEqual(8, result[Membership.MEMBERSHIP_TYPES[0][1]]) self.assertEqual(1, result[Membership.MEMBERSHIP_TYPES[1][1]]) self.assertEqual(1, result[Membership.MEMBERSHIP_TYPES[2][1]]) # Terminate one membership by setting end date to current_year -1, # should decrease total amount and total members m = Membership.objects.all()[2] m.until = timezone.now() - timedelta(days=365) m.save() result = gen_stats_year() self.assertEqual(9, self.sum_members(result)) self.assertEqual(7, self.sum_members(result, Membership.MEMBER)) self.assertEqual(1, self.sum_members(result, Membership.BENEFACTOR)) self.assertEqual(1, self.sum_members(result, Membership.HONORARY)) result = {k: v for k, v in gen_stats_member_type().items()} self.assertEqual(9, self.sum_member_types(result)) self.assertEqual(7, result[Membership.MEMBERSHIP_TYPES[0][1]]) self.assertEqual(1, result[Membership.MEMBERSHIP_TYPES[1][1]]) self.assertEqual(1, result[Membership.MEMBERSHIP_TYPES[2][1]])
def test_gen_stats_year_no_members(self): result = gen_stats_year() self.assertEqual(0, self.sum_members(result))