def test_within_publication_period(self): inst = self.Sample( published = utcnow() - timedelta(days=1), retracted = utcnow() + timedelta(days=1) ) assert inst.is_published
def test_cast_integer(self, Sample): v = timedelta(days=7) r = (utcnow() + v) inst = Sample(7) assert isinstance(inst.__data__['field'], datetime) assert inst.field == r
def test_cast_timedelta(self, Sample): v = -timedelta(days=7) r = (utcnow() + v) inst = Sample(v) assert isinstance(inst.__data__['field'], oid) assert inst.field.generation_time == r
def test_deserialize_expired(self): now = utcnow() inst = self.Sample.from_mongo({'expires': now}) assert inst is None inst = self.Sample.from_mongo({'expires': now + timedelta(hours=1)}) assert isinstance(inst, self.Sample) assert not inst.is_expired
def test_acquire_expired(self, sample): then = utcnow() - timedelta(days=30) sample.update_one(set__lock=sample.Lock(then, 'xyzzy')) sample.acquire() sample.reload('lock') assert sample.lock.instance == us() assert sample.did_expire
def test_release_expired(self, sample): then = utcnow() - timedelta(days=30) lock = sample.Lock(then) sample.update_one(set__lock=lock) try: sample.release() except sample.Locked as e: assert e.lock == lock assert sample.did_expire
def test_query_exact(self): now = utcnow() query = self.Sample.only_published(now) assert len(query) == 1 assert '$and' in query assert len(query['$and']) == 2 assert '$or' in query['$and'][0] assert '$or' in query['$and'][1] assert query['$and'][1]['$or'][2]['published']['$lte'] == query['$and'][0]['$or'][2]['retracted']['$gt'] == now
def test_query_exact(self): now = utcnow() query = self.Sample.only_published(now) assert len(query) == 1 assert '$and' in query assert len(query['$and']) == 2 assert '$or' in query['$and'][0] assert '$or' in query['$and'][1] assert query['$and'][1]['$or'][2]['published']['$lte'] == query[ '$and'][0]['$or'][2]['retracted']['$gt'] == now
def test_query_delta(self): when = utcnow() + timedelta(days=1) query = self.Sample.only_published(timedelta(days=1)) assert len(query) == 1 assert '$and' in query assert len(query['$and']) == 2 assert '$or' in query['$and'][0] assert '$or' in query['$and'][1] assert query['$and'][1]['$or'][2]['published']['$lte'] == query['$and'][0]['$or'][2]['retracted']['$gt'] v = query['$and'][1]['$or'][2]['published']['$lte'] assert abs(when - v) < timedelta(minutes=1)
def test_query_delta(self): when = utcnow() + timedelta(days=1) query = self.Sample.only_published(timedelta(days=1)) assert len(query) == 1 assert '$and' in query assert len(query['$and']) == 2 assert '$or' in query['$and'][0] assert '$or' in query['$and'][1] assert query['$and'][1]['$or'][2]['published']['$lte'] == query[ '$and'][0]['$or'][2]['retracted']['$gt'] v = query['$and'][1]['$or'][2]['published']['$lte'] assert abs(when - v) < timedelta(minutes=1)
def test_failures_now(self): now = utcnow() inst = self.Sample.Lock(now) assert inst.failures == 0
def test_utcnow(): now = utcnow() assert now.tzinfo
def test_expires(self): now = utcnow() inst = self.Sample.Lock(now) assert inst.expires == now + inst.__period__
def test_past_retraction(self): inst = self.Sample(retracted=utcnow() - timedelta(days=1)) assert not inst.is_published
def test_cast_datetime(self, Sample): v = utcnow() inst = Sample(v) assert isinstance(inst.__data__['field'], datetime) assert inst.field is v
def test_creation_modification_init(self): now = utcnow() inst = self.Sample() assert abs(inst.created - now) < timedelta(seconds=1) assert inst.modified is None
def test_timedelta_assignment(self): now = utcnow() inst = self.Sample(expires=timedelta(days=1)) assert timedelta(hours=23) < (inst.expires - now) < timedelta(hours=25)
def test_explicit_date(self): then = utcnow() - timedelta(days=1) inst = self.Sample(expires=then) assert inst.expires == then assert inst.is_expired
def test_future_public(self): inst = self.Sample(published=utcnow() + timedelta(days=1)) assert not inst.is_published
def test_cast_datetime(self, Sample): v = utcnow() inst = Sample(v) assert isinstance(inst.__data__['field'], oid) assert inst.field.generation_time == v
def test_failures_chain(self): then = utcnow() - timedelta(days=30) inst = self.Sample.Lock(then, timeouts=41) assert inst.failures == 42
def test_failures_then(self): then = utcnow() - timedelta(days=30) inst = self.Sample.Lock(then) assert inst.failures == 1
def test_integer_assignment(self): now = utcnow() inst = self.Sample(expires=0) assert inst.expires - now < timedelta(seconds=1) assert inst.is_expired
def test_within_publication_period(self): inst = self.Sample(published=utcnow() - timedelta(days=1), retracted=utcnow() + timedelta(days=1)) assert inst.is_published