Skip to content
Snippets Groups Projects
Commit 08fd228f authored by vlorentz's avatar vlorentz
Browse files

hypothesis_strategies: Generate aware datetimes instead of naive ones.

Production should only use aware datetimes.
parent 0fad8862
No related branches found
No related tags found
No related merge requests found
......@@ -6,6 +6,7 @@
import datetime
from hypothesis import assume
from hypothesis.extra.dateutil import timezones
from hypothesis.strategies import (
binary,
booleans,
......@@ -70,6 +71,10 @@ def sha1():
return binary(min_size=20, max_size=20)
def aware_datetimes():
return datetimes(timezones=timezones())
@composite
def urls(draw):
protocol = draw(sampled_from(["git", "http", "https", "deb"]))
......@@ -138,7 +143,7 @@ def origin_visits_d():
dict,
visit=integers(0, 1000),
origin=urls(),
date=datetimes(),
date=aware_datetimes(),
status=sampled_from(["ongoing", "full", "partial"]),
type=pgsql_text(),
snapshot=optional(sha1_git()),
......@@ -159,7 +164,7 @@ def origin_visit_statuses_d():
visit=integers(0, 1000),
origin=urls(),
status=sampled_from(["ongoing", "full", "partial"]),
date=datetimes(),
date=aware_datetimes(),
snapshot=optional(sha1_git()),
metadata=one_of(none(), metadata_dicts()),
)
......@@ -268,7 +273,7 @@ def present_contents_d():
return builds(
dict,
data=binary(max_size=4096),
ctime=optional(datetimes()),
ctime=optional(aware_datetimes()),
status=one_of(just("visible"), just("hidden")),
)
......@@ -288,7 +293,7 @@ def skipped_contents_d(draw):
result[k] = None
result["reason"] = draw(pgsql_text())
result["status"] = "absent"
result["ctime"] = draw(optional(datetimes()))
result["ctime"] = draw(optional(aware_datetimes()))
return result
......
......@@ -9,7 +9,14 @@ import attr
from hypothesis import given, settings
from swh.model.hashutil import DEFAULT_ALGORITHMS
from swh.model.hypothesis_strategies import objects, object_dicts, snapshots
from swh.model.hypothesis_strategies import (
objects,
object_dicts,
contents,
skipped_contents,
snapshots,
origin_visits,
)
from swh.model.model import TargetType
......@@ -125,6 +132,16 @@ def test_model_to_dicts(obj_type_and_obj):
assert branch is None or branch["target_type"] in target_types
@given(contents())
def test_content_aware_datetime(cont):
assert cont.ctime is None or cont.ctime.tzinfo is not None
@given(skipped_contents())
def test_skipped_content_aware_datetime(cont):
assert cont.ctime is None or cont.ctime.tzinfo is not None
_min_snp_size = 10
_max_snp_size = 100
......@@ -164,3 +181,8 @@ def test_snapshots_strategy(snapshot):
@settings(max_examples=1)
def test_snapshots_strategy_fixed_size(snapshot):
assert len(snapshot.branches) == _min_snp_size
@given(origin_visits())
def test_origin_visit_aware_datetime(visit):
assert visit.date.tzinfo is not None
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment