def test_groups_group_selected_no_topic_selected(self): group = FacilityGroup(name="Test Group", facility=self.facility) group.save() self.browser_login_admin() self.browse_to(self.reverse("tabular_view") + "?group=" + group.id) self.browser.find_element_by_css_selector('#error_message') self.assertEqual(self.browser.find_element_by_css_selector('#error_message').text, "Please select a topic above.", "Error message with no topic selected.")
def test_groups_group_selected_topic_selected_no_users(self): group = FacilityGroup(name="Test Group", facility=self.facility) group.save() self.browser_login_admin() self.browse_to(self.reverse("tabular_view") + "?topic=addition-subtraction&group=" + group.id) self.browser.find_element_by_css_selector('#error_message') self.assertEqual(self.browser.find_element_by_css_selector('#error_message').text, "No users found.", "Error message with no users available.")
class ChangeLocalUserPassword(unittest.TestCase): def setUp(self): self.facility = Facility(name="Test Facility") self.facility.save() self.group = FacilityGroup(facility=self.facility, name="Test Class") self.group.full_clean() self.group.save() self.user = FacilityUser(facility=self.facility, username="******", first_name="Firstname", last_name="Lastname", group=self.group) self.user.clear_text_password = "******" # not used anywhere but by us, for testing purposes self.user.set_password(self.user.clear_text_password) self.user.full_clean() self.user.save() def test_change_password(self): # Now, re-retrieve the user, to check. (out, err, val) = call_command_with_output("changelocalpassword", self.user.username, noinput=True) self.assertEquals(err, "", "no output on stderr") self.assertNotEquals(out, "", "some output on stderr") self.assertEquals(val, 0, "Exit code is zero") match = re.match( r"^.*Generated new password for user '([^']+)': '([^']+)'", out.replace("\n", ""), re.MULTILINE) self.assertFalse(match is None, "could not parse stdout") user = FacilityUser.objects.get(facility=self.facility, username=self.user.username) self.assertEquals(user.username, match.groups()[0], "Username reported correctly") self.assertTrue(user.check_password(match.groups()[1]), "New password works") self.assertFalse(user.check_password(self.user.clear_text_password), "NOT the old password") def test_no_user(self): fake_username = self.user.username + "xxxxx" #with self.assertRaises(FacilityUser.DoesNotExist): (out, err, val) = call_command_with_output("changelocalpassword", fake_username, noinput=True) self.assertNotIn("Generated new password for user", out, "Did not set password") self.assertNotEquals(err, "", "some output on stderr") match = re.match(r"^.*Error: user '([^']+)' does not exist$", err.replace("\n", ""), re.M) self.assertFalse(match is None, "could not parse stderr") self.assertEquals(match.groups()[0], fake_username, "Verify printed fake username") self.assertNotEquals(val, 0, "Verify exit code is non-zero")
def test_users_out_of_group(self): group = FacilityGroup(name="Test Group", facility=self.facility) group.save() FacilityUser(username="******", password="******", facility=self.facility).save() self.browser_login_admin() self.browse_to(self.reverse("tabular_view") + "?topic=addition-subtraction&group=" + group.id) self.browser.find_element_by_css_selector('#error_message') self.assertEqual(self.browser.find_element_by_css_selector('#error_message').text, "No users found.", "Error message with no users available.")
def test_success_with_group(self): group = FacilityGroup(name="Test Group", facility=self.facility) group.save() FacilityUser(username="******", password="******", facility=self.facility, group=group).save() self.browser_login_admin() self.browse_to(self.reverse("tabular_view") + "?topic=addition-subtraction&group=" + group.id) with self.assertRaises(NoSuchElementException): self.browser.find_element_by_css_selector('#error_message')
def handle(self, *args, **options): if settings.CENTRAL_SERVER: raise CommandError("Don't run this on the central server!! Data not linked to any zone on the central server is BAD.") facility = Facility(name="Wilson Elementary") facility.save() group1 = FacilityGroup(facility=facility, name="Class 4E") group1.full_clean() group1.save() group2 = FacilityGroup(facility=facility, name="Class 5B") group2.full_clean() group2.save() facilityusers = [] for i in range(0,10): newuser1 = FacilityUser(facility=facility, username=usernames[i], first_name=firstnames[i], last_name=lastnames[i], group=group1) if settings.DEBUG: newuser1.set_password(hashed_password = hashed_blah)#"blah") else: newuser1.set_password("blah") newuser1.full_clean() newuser1.save() facilityusers.append(newuser1) newuser2 = FacilityUser(facility=facility, username=usernames[i+10], first_name=firstnames[i+10], last_name=lastnames[i+10], group=group2) if settings.DEBUG: newuser2.set_password(hashed_password = hashed_blah)#"blah") else: newuser2.set_password("blah") newuser2.full_clean() newuser2.save() facilityusers.append(newuser2) for topic in topics: exercises = get_topic_exercises(topic_id=topic) exercises_a = [random.random() for i in range(len(exercises))] exercises_b = [float(i) / len(exercises) for i in range(len(exercises))] for i, user in enumerate(facilityusers): for j, exercise in enumerate(exercises): sig = sigmoid(proficiency[i], exercises_a[j], exercises_b[j]) if random.random() < 0.05 * (1-sig) and j > 2: break if random.random() < 0.15: continue attempts = random.random() * 40 + 10 streak_progress = max(10, min(100, 10 * random.random() + 10 * attempts * sig)) print int(attempts), int(streak_progress), user.first_name, exercise["name"] log = ExerciseLog(user=user, exercise_id=exercise["name"], attempts=attempts, streak_progress=streak_progress) log.full_clean() log.save()
def test_unicode_string(self): # Dependencies dev = Device.get_own_device() self.assertNotIn(unicode(dev), "Bad Unicode data", "Device: Bad conversion to unicode.") fac = Facility(name=self.korean_string) fac.save() self.assertNotIn(unicode(fac), "Bad Unicode data", "Facility: Bad conversion to unicode.") fg = FacilityGroup(facility=fac, name=self.korean_string) fg.save() self.assertNotIn(unicode(fg), "Bad Unicode data", "FacilityGroup: Bad conversion to unicode.") user = FacilityUser( facility=fac, group=fg, first_name=self.korean_string, last_name=self.korean_string, username=self.korean_string, notes=self.korean_string, ) user.set_password(self.korean_string * settings.PASSWORD_CONSTRAINTS["min_length"]) user.save() self.assertNotIn(unicode(user), "Bad Unicode data", "FacilityUser: Bad conversion to unicode.") known_classes = [ExerciseLog, UserLog, UserLogSummary, VideoLog] # elog = ExerciseLog(user=user, exercise_id=self.korean_string) self.assertNotIn(unicode(elog), "Bad Unicode data", "ExerciseLog: Bad conversion to unicode (before saving).") elog.save() self.assertNotIn(unicode(elog), "Bad Unicode data", "ExerciseLog: Bad conversion to unicode (after saving).") vlog = VideoLog(user=user, video_id=self.korean_string, youtube_id=self.korean_string) self.assertNotIn(unicode(vlog), "Bad Unicode data", "VideoLog: Bad conversion to unicode (before saving).") vlog.save() self.assertNotIn(unicode(vlog), "Bad Unicode data", "VideoLog: Bad conversion to unicode (after saving).") ulog = UserLog(user=user) self.assertNotIn(unicode(ulog), "Bad Unicode data", "UserLog: Bad conversion to unicode.") ulogsum = UserLogSummary( user=user, device=dev, activity_type=1, start_datetime=datetime.now(), end_datetime=datetime.now(), ) self.assertNotIn(unicode(ulogsum), "Bad Unicode data", "UserLogSummary: Bad conversion to unicode.")
def setUp(self): self.facility = Facility(name="Test Facility") self.facility.save() self.group = FacilityGroup(facility=self.facility, name="Test Class") self.group.full_clean() self.group.save() self.user = FacilityUser(facility=self.facility, username="******", first_name="Firstname", last_name="Lastname", group=self.group) self.user.clear_text_password = "******" # not used anywhere but by us, for testing purposes self.user.set_password(self.user.clear_text_password) self.user.full_clean() self.user.save()
class ChangeLocalUserPassword(unittest.TestCase): def setUp(self): self.facility = Facility(name="Test Facility") self.facility.save() self.group = FacilityGroup(facility=self.facility, name="Test Class") self.group.full_clean() self.group.save() self.user = FacilityUser(facility=self.facility, username="******", first_name="Firstname", last_name="Lastname", group=self.group) self.user.clear_text_password = "******" # not used anywhere but by us, for testing purposes self.user.set_password(self.user.clear_text_password) self.user.full_clean() self.user.save() def test_change_password(self): # Now, re-retrieve the user, to check. (out,err,val) = call_command_with_output("changelocalpassword", self.user.username, noinput=True) self.assertEquals(err, "", "no output on stderr") self.assertNotEquals(out, "", "some output on stderr") self.assertEquals(val, 0, "Exit code is zero") match = re.match(r"^.*Generated new password for user '([^']+)': '([^']+)'", out.replace("\n",""), re.MULTILINE) self.assertFalse(match is None, "could not parse stdout") user = FacilityUser.objects.get(facility=self.facility, username=self.user.username) self.assertEquals(user.username, match.groups()[0], "Username reported correctly") self.assertTrue(user.check_password(match.groups()[1]), "New password works") self.assertFalse(user.check_password(self.user.clear_text_password), "NOT the old password") def test_no_user(self): fake_username = self.user.username + "xxxxx" #with self.assertRaises(FacilityUser.DoesNotExist): (out,err,val) = call_command_with_output("changelocalpassword", fake_username, noinput=True) self.assertNotIn("Generated new password for user", out, "Did not set password") self.assertNotEquals(err, "", "some output on stderr") match = re.match(r"^.*Error: user '([^']+)' does not exist$", err.replace("\n",""), re.M) self.assertFalse(match is None, "could not parse stderr") self.assertEquals(match.groups()[0], fake_username, "Verify printed fake username") self.assertNotEquals(val, 0, "Verify exit code is non-zero")
def test_groups_no_group_selected(self): FacilityGroup(name="Test Group", facility=self.facility).save() self.browser_login_admin() self.browse_to(url_name="tabular_view") self.browser.find_element_by_css_selector('#error_message') self.assertEqual( self.browser.find_element_by_css_selector('#error_message').text, "Please select a group above.", "Error message with no group selected.")
def handle(self, *args, **options): facility = Facility(name="Wilson Elementary") facility.save() group1 = FacilityGroup(facility=facility, name="Class 4E") group1.full_clean() group1.save() group2 = FacilityGroup(facility=facility, name="Class 5B") group2.full_clean() group2.save() facilityusers = [] for i in range(0,10): newuser1 = FacilityUser(facility=facility, username=usernames[i], first_name=firstnames[i], last_name=lastnames[i], group=group1) newuser1.set_password("blah") newuser1.full_clean() newuser1.save() facilityusers.append(newuser1) newuser2 = FacilityUser(facility=facility, username=usernames[i+10], first_name=firstnames[i+10], last_name=lastnames[i+10], group=group2) newuser2.set_password("blah") newuser2.full_clean() newuser2.save() facilityusers.append(newuser2) for topic in topics: exercises = json.load(open("./static/data/topicdata/" + topic + ".json","r")) exercises = sorted(exercises, key = lambda k: (k["h_position"], k["v_position"])) exercises_a = [random.random() for i in range(len(exercises))] exercises_b = [float(i) / len(exercises) for i in range(len(exercises))] for i, user in enumerate(facilityusers): for j, exercise in enumerate(exercises): sig = sigmoid(proficiency[i], exercises_a[j], exercises_b[j]) if random.random() < 0.05 * (1-sig) and j > 2: break if random.random() < 0.15: continue attempts = random.random() * 40 + 10 streak_progress = max(10, min(100, 10 * random.random() + 10 * attempts * sig)) print int(attempts), int(streak_progress), user.first_name, exercise["name"] log = ExerciseLog(user=user, exercise_id=exercise["name"], attempts=attempts, streak_progress=streak_progress) log.full_clean() log.save()
def generate_fake_facility_groups(names=("Class 4E", "Class 5B"), facilities=None): """Add the given fake facility groups to the given fake facilities""" if not facilities: facilities = generate_fake_facilities() facility_groups = [] for facility in facilities: for name in names: try: facility_group = FacilityGroup.objects.get(facility=facility, name=name) logging.info("Retrieved facility group '%s'" % name) except FacilityGroup.DoesNotExist as e: facility_group = FacilityGroup(facility=facility, name=name) facility_group.full_clean() facility_group.save() logging.info("Created facility group '%s'" % name) facility_groups.append(facility_group) return (facility_groups, facilities)
def generate_fake_facility_groups(names=("Class 4E", "Class 5B"), facilities=None): """Add the given fake facility groups to the given fake facilities""" if not facilities: facilities = generate_fake_facilities() facility_groups = [] for facility in facilities: for name in names: found_facility_groups = FacilityGroup.objects.filter(facility=facility, name=name) if found_facility_groups: facility_group = found_facility_groups[0] logging.info("Retrieved facility group '%s'" % name) else: facility_group = FacilityGroup(facility=facility, name=name) facility_group.save() logging.info("Created facility group '%s'" % name) facility_groups.append(facility_group) return (facility_groups, facilities)
def generate_fake_facility_groups( names=("Class 4E", "Class 5B"), facilities=None): """Add the given fake facility groups to the given fake facilities""" if not facilities: facilities = generate_fake_facilities() facility_groups = [] for facility in facilities: for name in names: found_facility_groups = FacilityGroup.objects.filter( facility=facility, name=name) if found_facility_groups: facility_group = found_facility_groups[0] logging.info("Retrieved facility group '%s'" % name) else: facility_group = FacilityGroup(facility=facility, name=name) facility_group.save() logging.info("Created facility group '%s'" % name) facility_groups.append(facility_group) return (facility_groups, facilities)
def generate_fake_facility_groups( names=("Class 4E", "Class 5B"), facilities=None): """Add the given fake facility groups to the given fake facilities""" if not facilities: facilities = generate_fake_facilities() facility_groups = [] for facility in facilities: for name in names: try: facility_group = FacilityGroup.objects.get(facility=facility, name=name) logging.info("Retrieved facility group '%s'" % name) except FacilityGroup.DoesNotExist as e: facility_group = FacilityGroup(facility=facility, name=name) facility_group.full_clean() facility_group.save() logging.info("Created facility group '%s'" % name) facility_groups.append(facility_group) return (facility_groups, facilities)
def test_unicode_string(self): # Dependencies dev = Device.get_own_device() self.assertNotIn(unicode(dev), "Bad Unicode data", "Device: Bad conversion to unicode.") fac = Facility(name=self.korean_string) fac.save() self.assertNotIn(unicode(fac), "Bad Unicode data", "Facility: Bad conversion to unicode.") fg = FacilityGroup(facility=fac, name=self.korean_string) fg.save() self.assertNotIn(unicode(fg), "Bad Unicode data", "FacilityGroup: Bad conversion to unicode.") user = FacilityUser( facility=fac, group=fg, first_name=self.korean_string, last_name=self.korean_string, username=self.korean_string, notes=self.korean_string, password=self.korean_string, ) user.save() self.assertNotIn(unicode(user), "Bad Unicode data", "FacilityUser: Bad conversion to unicode.") known_classes = [ExerciseLog, UserLog, UserLogSummary, VideoLog] # elog = ExerciseLog(user=user, exercise_id=self.korean_string) self.assertNotIn( unicode(elog), "Bad Unicode data", "ExerciseLog: Bad conversion to unicode (before saving).") elog.save() self.assertNotIn( unicode(elog), "Bad Unicode data", "ExerciseLog: Bad conversion to unicode (after saving).") vlog = VideoLog(user=user, youtube_id=self.korean_string) self.assertNotIn( unicode(vlog), "Bad Unicode data", "VideoLog: Bad conversion to unicode (before saving).") vlog.save() self.assertNotIn( unicode(vlog), "Bad Unicode data", "VideoLog: Bad conversion to unicode (after saving).") ulog = UserLog(user=user) self.assertNotIn(unicode(ulog), "Bad Unicode data", "UserLog: Bad conversion to unicode.") ulogsum = UserLogSummary( user=user, device=dev, activity_type=1, start_datetime=datetime.now(), end_datetime=datetime.now(), ) self.assertNotIn(unicode(ulogsum), "Bad Unicode data", "UserLogSummary: Bad conversion to unicode.")
def handle(self, *args, **options): facility = Facility(name="Wilson Elementary") facility.save() group1 = FacilityGroup(facility=facility, name="Class 4E") group1.full_clean() group1.save() group2 = FacilityGroup(facility=facility, name="Class 5B") group2.full_clean() group2.save() facilityusers = [] for i in range(0,10): newuser1 = FacilityUser(facility=facility, username=usernames[i], first_name=firstnames[i], last_name=lastnames[i], group=group1) if settings.DEBUG: newuser1.set_password(hashed_password = hashed_blah)#"blah") else: newuser1.set_password("blah") newuser1.full_clean() newuser1.save() facilityusers.append(newuser1) newuser2 = FacilityUser(facility=facility, username=usernames[i+10], first_name=firstnames[i+10], last_name=lastnames[i+10], group=group2) if settings.DEBUG: newuser2.set_password(hashed_password = hashed_blah)#"blah") else: newuser2.set_password("blah") newuser2.full_clean() newuser2.save() facilityusers.append(newuser2) for topic in topics: exercises = get_topic_exercises(topic_id=topic) exercises_a = [random.random() for i in range(len(exercises))] exercises_b = [float(i) / len(exercises) for i in range(len(exercises))] for i, user in enumerate(facilityusers): for j, exercise in enumerate(exercises): sig = sigmoid(proficiency[i], exercises_a[j], exercises_b[j]) if random.random() < 0.05 * (1-sig) and j > 2: break if random.random() < 0.15: continue attempts = random.random() * 40 + 10 streak_progress = max(10, min(100, 10 * random.random() + 10 * attempts * sig)) print int(attempts), int(streak_progress), user.first_name, exercise["name"] log = ExerciseLog(user=user, exercise_id=exercise["name"], attempts=attempts, streak_progress=streak_progress) log.full_clean() log.save()