|
| 1 | +from __future__ import annotations |
| 2 | + |
| 3 | +from typing import Dict, List, Optional, Set, Union |
| 4 | + |
| 5 | +from tests.conftest import fake |
| 6 | +from tests.factories.base import datetime_repr_factory |
| 7 | + |
| 8 | + |
| 9 | +try: |
| 10 | + import zoneinfo |
| 11 | +except ImportError: |
| 12 | + from backports import zoneinfo |
| 13 | + |
| 14 | + |
| 15 | +def workspace_request_factory( |
| 16 | + exclude: Optional[Set[str]] = None, |
| 17 | +) -> Dict[str, Union[str, bool, List[int]]]: |
| 18 | + request = { |
| 19 | + "admins": [fake.random_int() for _ in range(fake.random_int(max=5))], |
| 20 | + "name": fake.text(max_nb_chars=139), |
| 21 | + "only_admins_may_create_tags": fake.boolean(), |
| 22 | + "only_admins_see_team_dashboard": fake.boolean(), |
| 23 | + "reports_collapse": fake.boolean(), |
| 24 | + } |
| 25 | + |
| 26 | + if exclude: |
| 27 | + for excluded_field in exclude: |
| 28 | + del request[excluded_field] |
| 29 | + |
| 30 | + return request |
| 31 | + |
| 32 | + |
| 33 | +def workspace_response_factory( |
| 34 | + workspace_id: Optional[int] = None, |
| 35 | +) -> Dict[str, Union[str, bool, int, None]]: |
| 36 | + timezone_name = fake.timezone() |
| 37 | + timezone = zoneinfo.ZoneInfo(timezone_name) |
| 38 | + |
| 39 | + return { |
| 40 | + "admin": fake.boolean(), |
| 41 | + "at": datetime_repr_factory(timezone), |
| 42 | + "business_ws": fake.boolean(), |
| 43 | + "csv_upload": None, |
| 44 | + "default_currency": fake.currency_code(), |
| 45 | + "default_hourly_rate": str(fake.pyfloat()) if fake.boolean() else None, |
| 46 | + "hide_start_end_times": fake.boolean(), |
| 47 | + "ical_enabled": fake.boolean(), |
| 48 | + "ical_url": fake.url() if fake.boolean() else None, |
| 49 | + "id": workspace_id or fake.random_int(), |
| 50 | + "last_modified": datetime_repr_factory(timezone) if fake.boolean() else None, |
| 51 | + "logo_url": fake.image_url(), |
| 52 | + "name": fake.text(max_nb_chars=139), |
| 53 | + "only_admins_may_create_projects": fake.boolean(), |
| 54 | + "only_admins_may_create_tags": fake.boolean(), |
| 55 | + "only_admins_see_billable_rates": fake.boolean(), |
| 56 | + "only_admins_see_team_dashboard": fake.boolean(), |
| 57 | + "organization_id": 8364520, |
| 58 | + "permissions": None, |
| 59 | + "premium": fake.boolean(), |
| 60 | + "projects_billable_by_default": fake.boolean(), |
| 61 | + "projects_enforce_billable": fake.boolean(), |
| 62 | + "projects_private_by_default": fake.boolean(), |
| 63 | + "rate_last_updated": datetime_repr_factory(timezone) if fake.boolean() else None, |
| 64 | + "reports_collapse": fake.boolean(), |
| 65 | + "role": "admin", |
| 66 | + "rounding": fake.random_element(elements=(-1, 0, 1)), |
| 67 | + "rounding_minutes": 0, |
| 68 | + "server_deleted_at": datetime_repr_factory(timezone) if fake.boolean() else None, |
| 69 | + "suspended_at": datetime_repr_factory(timezone) if fake.boolean() else None, |
| 70 | + "working_hours_in_minutes": fake.random_int(min=0, max=59) if fake.boolean() else None, |
| 71 | + } |
0 commit comments