def test_diff_top_level_attributes(self): valid = datetime.utcnow() expires1 = valid + timedelta(days=30) expires2 = valid + timedelta(days=31) couch = MobileAuthKeyRecord(domain='my-domain', user_id='123', valid=valid, expires=expires1) sql = SQLMobileAuthKeyRecord(domain='other-domain', user_id='123', valid=valid, expires=expires2) (domain_diff, key_diff, expires_diff) = Command.get_diff_as_string(couch.to_json(), sql).split("\n") self.assertEqual( domain_diff, "domain: couch value 'my-domain' != sql value 'other-domain'") self.assertRegex(key_diff, r"key: couch value '.+' != sql value '.+'") self.assertRegex( expires_diff, r"expires: couch value datetime.datetime\(\d{4}, \d+, \d+, \d+, \d+, \d+, \d+\) != " r"sql value datetime.datetime\(\d{4}, \d+, \d+, \d+, \d+, \d+, \d+\)" )
def test_diff_identical(self): key = '234' valid = datetime.utcnow() expires = valid + timedelta(days=30) couch = MobileAuthKeyRecord(domain='my-domain', user_id='123', valid=valid, expires=expires, key=key) sql = SQLMobileAuthKeyRecord(domain='my-domain', user_id='123', valid=valid, expires=expires, key=key) self.assertIsNone(Command.get_diff_as_string(couch.to_json(), sql))
def test_sync_to_sql(self): valid = datetime.utcnow() expires = valid + timedelta(days=30) couch = MobileAuthKeyRecord(domain='my-domain', user_id='123', valid=valid, expires=expires) couch.save() actual = SQLMobileAuthKeyRecord.objects.get(id=couch._id) self.assertEqual(actual.domain, 'my-domain') self.assertEqual(actual.user_id, '123') self.assertEqual(actual.valid, valid) self.assertEqual(actual.expires, expires) self.assertEqual(actual.type, 'AES256') self.assertEqual(actual.key, couch.key)
def test_migration(self): valid = datetime.utcnow() expires = valid + timedelta(days=30) couch = MobileAuthKeyRecord(domain='my-domain', user_id='123', valid=valid, expires=expires) couch.save() # Create any sql objects that didn't exist pre-migration call_command('populate_mobileauthkeyrecord') actual = SQLMobileAuthKeyRecord.objects.get(id=couch._id) self.assertEqual(actual.domain, 'my-domain') self.assertEqual(actual.user_id, '123') self.assertEqual(actual.valid, valid) self.assertEqual(actual.expires, expires) self.assertEqual(actual.type, 'AES256') self.assertEqual(actual.key, couch.key) # Update any pre-existing sql objects couch['domain'] = 'other-domain' couch['user_id'] = '456' couch.save(sync_to_sql=False) call_command('populate_mobileauthkeyrecord') actual = SQLMobileAuthKeyRecord.objects.get(id=couch._id) self.assertEqual(actual.domain, 'other-domain') self.assertEqual(actual.user_id, '456') self.assertEqual(actual.valid, valid) self.assertEqual(actual.expires, expires) self.assertEqual(actual.type, 'AES256') self.assertEqual(actual.key, couch.key)
def new_key_record(domain, user_id, now=None): """ return initialized but unsaved MobileAuthKeyRecord """ from corehq.apps.mobile_auth.models import MobileAuthKeyRecord now = now or datetime.utcnow() record = MobileAuthKeyRecord( domain=domain, user_id=user_id, valid=now, ) bump_expiry(record, now=now) return record
def key_for_time(self, now): return MobileAuthKeyRecord.current_for_user( domain=self.domain, user_id=self.user_id, now=now, )
def tearDown(self): SQLMobileAuthKeyRecord.objects.all().delete() for doc in get_all_docs_with_doc_types(self.db, ['MobileAuthKeyRecord']): MobileAuthKeyRecord.wrap(doc).delete() super().tearDown()
def setUpClass(cls): super().setUpClass() cls.db = MobileAuthKeyRecord.get_db()