Ejemplo n.º 1
0
 def test_multiple_unsorted_no_diff(self):
     ds = [DbMember(UserFactory(name=str(i))) for i in range(1001, 1010)]
     shuffle(ds)
     ms = [MakerAdminMemberFactory(member_number=i) for i in range(1001, 1010)]
     shuffle(ms)
     
     self.assertEqual([], AddMember.find_diffs(ds, ms))
Ejemplo n.º 2
0
 def test_update_diffs_fails_on_sanity_check_if_wrong_authority_name(self):
     c = CustomerFactory()
     a = AuthorityFactory(name="makerspace stockholm")
     m = MakerAdminMemberFactory()
     
     with self.assertRaises(Exception):
         update_diffs(self.session, self.tui, [AddMember(m)], customer_id=c.id, authority_id=a.id)
Ejemplo n.º 3
0
 def test_update_diff_adds_member_and_auth(self):
     c = CustomerFactory()
     a = AuthorityFactory()
     m = MakerAdminMemberFactory(member_number=1001, rfid_tag='4444', end_timestamp=self.datetime())
     
     AddMember(m).update(self.session, self.tui, customer_id=c.id, authority_id=a.id)
     
     users = self.session.query(User).all()
     print(users)
     self.assertEqual(1, len(users))
     
     u = users[0]
     self.assertEqual("1001", u.name)
     self.assertEqual(self.datetime(), u.stop_timestamp)
     self.assertEqual(None, u.blocked)
     self.assertEqual("4444", u.card)
     self.assertEqual(c.id, u.customer_id)
     
     auths = self.session.query(AuthorityInUser).filter_by(user_id=u.id).all()
     self.assertEqual(1, len(auths))
     
     auth = auths[0]
     self.assertEqual(a.id, auth.authority_id)
Ejemplo n.º 4
0
def sync(session=None,
         client=None,
         ui=None,
         customer_id=None,
         authority_id=None,
         what=None,
         ignore_running=False):
    what = what or WHAT_ALL

    # Exit if MultiAccess is running

    if not ignore_running:
        ui.info__progress("checking for running MultiAccess")
        if is_multi_access_running():
            ui.info__progress(
                "looks like MultiAccess is running, please exit MultiAccess and run again"
            )
            return

    # Log in to the MakerAdmin server unless we are already logged in
    if not client.is_logged_in():
        while not client.login():
            pass

    # Run actions on MakerAdmin (ship orders and update key timestamps)

    if WHAT_ORDERS in what:
        client.ship_orders(ui)

    # Fetch from MakerAdmin

    ma_members = client.fetch_members(ui)

    # Fetch relevant data from db and diff it

    db_members = get_multi_access_members(session, ui, customer_id)

    # Diff maker data.

    ui.info__progress('diffing multi access users against maker admin members')
    diffs = []
    if WHAT_UPDATE in what:
        diffs += UpdateMember.find_diffs(db_members, ma_members)
    if WHAT_ADD in what:
        diffs += AddMember.find_diffs(db_members, ma_members)
    if WHAT_BLOCK in what:
        diffs += BlockMember.find_diffs(db_members, ma_members)

    if not diffs:
        ui.info__progress('nothing to update')
        return

    # Present diff of what will be changed

    ui.prompt__update_db(
        heading=f'the following {len(diffs)} changes will be made',
        lines=[d.describe_update() for d in diffs])

    # Preform changes

    update_diffs(session,
                 ui,
                 diffs,
                 customer_id=customer_id,
                 authority_id=authority_id)
    ui.info__progress('finished updating db')

    return
Ejemplo n.º 5
0
 def test_multiple_diffs_and_multiple_non_diffs_works(self):
     ds = [DbMember(UserFactory(name=n)) for n in ["1001", "1002", "1003"]]
     ms = [MakerAdminMemberFactory(member_number=n) for n in [1001, 1003, 1004, 1005]]
     
     diffs = [d.m.member_number for d in AddMember.find_diffs(ds, ms)]
     self.assertCountEqual([1004, 1005], diffs)
Ejemplo n.º 6
0
 def test_excessive_db_user_creates_no_diff(self):
     d = DbMember(UserFactory(name="1001"))
     
     self.assertEqual([], AddMember.find_diffs([d], []))
Ejemplo n.º 7
0
 def test_simple_diff_add_one_user(self):
     m = MakerAdminMemberFactory(member_number=1001)
     
     self.assertEqual([AddMember(m)], AddMember.find_diffs([], [m]))
Ejemplo n.º 8
0
 def test_simple_no_diff(self):
     d = DbMember(UserFactory(name="1001"))
     m = MakerAdminMemberFactory(member_number=1001)
     
     self.assertEqual([], AddMember.find_diffs([d], [m]))