|
1 | 1 | """Test hosting views."""
|
2 | 2 |
|
| 3 | +import json |
| 4 | +from pathlib import Path |
| 5 | + |
3 | 6 | import django_dynamic_fixture as fixture
|
4 | 7 | import pytest
|
5 |
| -from django.conf import settings |
6 | 8 | from django.contrib.auth.models import User
|
7 | 9 | from django.test import TestCase, override_settings
|
8 | 10 | from django.urls import reverse
|
9 | 11 |
|
10 |
| -from readthedocs.builds.constants import EXTERNAL, INTERNAL, LATEST |
| 12 | +from readthedocs.builds.constants import LATEST |
11 | 13 | from readthedocs.builds.models import Build
|
12 | 14 | from readthedocs.projects.constants import PUBLIC
|
13 | 15 | from readthedocs.projects.models import Project
|
|
21 | 23 | @pytest.mark.proxito
|
22 | 24 | class TestReadTheDocsConfigJson(TestCase):
|
23 | 25 | def setUp(self):
|
24 |
| - self.user = fixture.get(User, username="user") |
25 |
| - self.user.set_password("user") |
| 26 | + self.user = fixture.get(User, username="testuser") |
| 27 | + self.user.set_password("testuser") |
26 | 28 | self.user.save()
|
27 | 29 |
|
28 | 30 | self.project = fixture.get(
|
29 | 31 | Project,
|
30 | 32 | slug="project",
|
| 33 | + name="project", |
31 | 34 | language="en",
|
32 | 35 | privacy_level=PUBLIC,
|
33 | 36 | external_builds_privacy_level=PUBLIC,
|
34 |
| - repo="git://10.10.0.1/project", |
| 37 | + repo="https://github.com/readthedocs/project", |
35 | 38 | programming_language="words",
|
36 | 39 | single_version=False,
|
37 | 40 | users=[self.user],
|
38 | 41 | main_language_project=None,
|
| 42 | + project_url="http://project.com", |
39 | 43 | )
|
| 44 | + |
| 45 | + for tag in ("tag", "project", "test"): |
| 46 | + self.project.tags.add(tag) |
| 47 | + |
40 | 48 | self.project.versions.update(
|
41 | 49 | privacy_level=PUBLIC,
|
42 | 50 | built=True,
|
43 | 51 | active=True,
|
44 |
| - type=INTERNAL, |
45 |
| - identifier="1a2b3c", |
| 52 | + type="tag", |
| 53 | + identifier="a1b2c3", |
46 | 54 | )
|
47 | 55 | self.version = self.project.versions.get(slug=LATEST)
|
48 | 56 | self.build = fixture.get(
|
49 | 57 | Build,
|
| 58 | + project=self.project, |
50 | 59 | version=self.version,
|
| 60 | + commit="a1b2c3", |
| 61 | + length=60, |
| 62 | + state="finished", |
| 63 | + success=True, |
| 64 | + ) |
| 65 | + |
| 66 | + def _get_response_dict(self, view_name, filepath=None): |
| 67 | + filepath = filepath or __file__ |
| 68 | + filename = Path(filepath).absolute().parent / "responses" / f"{view_name}.json" |
| 69 | + return json.load(open(filename)) |
| 70 | + |
| 71 | + def _normalize_datetime_fields(self, obj): |
| 72 | + obj["project"]["created"] = "2019-04-29T10:00:00Z" |
| 73 | + obj["project"]["modified"] = "2019-04-29T12:00:00Z" |
| 74 | + obj["build"]["created"] = "2019-04-29T10:00:00Z" |
| 75 | + obj["build"]["finished"] = "2019-04-29T10:01:00Z" |
| 76 | + return obj |
| 77 | + |
| 78 | + def test_get_config_v0(self): |
| 79 | + r = self.client.get( |
| 80 | + reverse("proxito_readthedocs_config_json"), |
| 81 | + {"url": "https://project.dev.readthedocs.io/en/latest/"}, |
| 82 | + secure=True, |
| 83 | + HTTP_HOST="project.dev.readthedocs.io", |
| 84 | + HTTP_X_RTD_HOSTING_INTEGRATIONS_VERSION="0.1.0", |
| 85 | + ) |
| 86 | + assert r.status_code == 200 |
| 87 | + assert self._normalize_datetime_fields(r.json()) == self._get_response_dict( |
| 88 | + "v0" |
51 | 89 | )
|
52 | 90 |
|
53 |
| - def test_get_config(self): |
| 91 | + def test_get_config_v1(self): |
54 | 92 | r = self.client.get(
|
55 | 93 | reverse("proxito_readthedocs_config_json"),
|
56 | 94 | {"url": "https://project.dev.readthedocs.io/en/latest/"},
|
57 | 95 | secure=True,
|
58 | 96 | HTTP_HOST="project.dev.readthedocs.io",
|
| 97 | + HTTP_X_RTD_HOSTING_INTEGRATIONS_VERSION="1.0.0", |
59 | 98 | )
|
60 | 99 | assert r.status_code == 200
|
| 100 | + assert r.json() == self._get_response_dict("v1") |
61 | 101 |
|
62 |
| - expected = { |
63 |
| - "comment": "THIS RESPONSE IS IN ALPHA FOR TEST PURPOSES ONLY AND IT'S GOING TO CHANGE COMPLETELY -- DO NOT USE IT!", |
64 |
| - "project": { |
65 |
| - "slug": self.project.slug, |
66 |
| - "language": self.project.language, |
67 |
| - "repository_url": self.project.repo, |
68 |
| - "programming_language": self.project.programming_language, |
69 |
| - }, |
70 |
| - "version": { |
71 |
| - "slug": self.version.slug, |
72 |
| - "external": self.version.type == EXTERNAL, |
73 |
| - }, |
74 |
| - "build": { |
75 |
| - "id": self.build.pk, |
76 |
| - }, |
77 |
| - "domains": { |
78 |
| - "dashboard": settings.PRODUCTION_DOMAIN, |
79 |
| - }, |
80 |
| - "readthedocs": { |
81 |
| - "analytics": { |
82 |
| - "code": None, |
83 |
| - } |
84 |
| - }, |
85 |
| - "features": { |
86 |
| - "analytics": { |
87 |
| - "code": None, |
88 |
| - }, |
89 |
| - "external_version_warning": { |
90 |
| - "enabled": True, |
91 |
| - "query_selector": "[role=main]", |
92 |
| - }, |
93 |
| - "non_latest_version_warning": { |
94 |
| - "enabled": True, |
95 |
| - "query_selector": "[role=main]", |
96 |
| - "versions": [ |
97 |
| - "latest", |
98 |
| - ], |
99 |
| - }, |
100 |
| - "doc_diff": { |
101 |
| - "enabled": True, |
102 |
| - "base_url": "https://project.dev.readthedocs.io/en/latest/index.html", |
103 |
| - "root_selector": "[role=main]", |
104 |
| - "inject_styles": True, |
105 |
| - "base_host": "", |
106 |
| - "base_page": "", |
107 |
| - }, |
108 |
| - "flyout": { |
109 |
| - "translations": [], |
110 |
| - "versions": [ |
111 |
| - {"slug": "latest", "url": "/en/latest/"}, |
112 |
| - ], |
113 |
| - "downloads": [], |
114 |
| - "vcs": { |
115 |
| - "url": "https://github.com", |
116 |
| - "username": "readthedocs", |
117 |
| - "repository": "test-builds", |
118 |
| - "branch": self.version.identifier, |
119 |
| - "filepath": "/docs/index.rst", |
120 |
| - }, |
121 |
| - }, |
122 |
| - "search": { |
123 |
| - "api_endpoint": "/_/api/v3/search/", |
124 |
| - "default_filter": "subprojects:project/latest", |
125 |
| - "filters": [ |
126 |
| - ["Search only in this project", "project:project/latest"], |
127 |
| - ["Search subprojects", "subprojects:project/latest"], |
128 |
| - ], |
129 |
| - "project": "project", |
130 |
| - "version": "latest", |
131 |
| - }, |
132 |
| - }, |
133 |
| - } |
134 |
| - assert r.json() == expected |
| 102 | + def test_get_config_unsupported_version(self): |
| 103 | + r = self.client.get( |
| 104 | + reverse("proxito_readthedocs_config_json"), |
| 105 | + {"url": "https://project.dev.readthedocs.io/en/latest/"}, |
| 106 | + secure=True, |
| 107 | + HTTP_HOST="project.dev.readthedocs.io", |
| 108 | + HTTP_X_RTD_HOSTING_INTEGRATIONS_VERSION="2.0.0", |
| 109 | + ) |
| 110 | + assert r.status_code == 400 |
| 111 | + assert r.json() == self._get_response_dict("v2") |
0 commit comments