|
1 | 1 | # Copyright The IETF Trust 2022, All Rights Reserved |
2 | 2 |
|
3 | | -from ietf.doc.templatetags.ietf_filters import urlize_ietf_docs |
| 3 | +from django.conf import settings |
| 4 | + |
| 5 | +from ietf.doc.factories import ( |
| 6 | + WgDraftFactory, |
| 7 | + IndividualDraftFactory, |
| 8 | + CharterFactory, |
| 9 | + NewRevisionDocEventFactory, |
| 10 | +) |
| 11 | +from ietf.doc.models import State, DocEvent, DocAlias |
| 12 | +from ietf.doc.templatetags.ietf_filters import urlize_ietf_docs, is_valid_url |
| 13 | +from ietf.person.models import Person |
4 | 14 | from ietf.utils.test_utils import TestCase |
5 | 15 |
|
6 | | -import debug # pyflakes: ignore |
| 16 | +import debug # pyflakes: ignore |
| 17 | + |
7 | 18 | # TODO: most other filters need test cases, too |
8 | 19 |
|
9 | 20 |
|
10 | 21 | class IetfFiltersTests(TestCase): |
| 22 | + def test_is_valid_url(self): |
| 23 | + cases = [(settings.IDTRACKER_BASE_URL, True), ("not valid", False)] |
| 24 | + for url, result in cases: |
| 25 | + self.assertEqual(is_valid_url(url), result) |
| 26 | + |
11 | 27 | def test_urlize_ietf_docs(self): |
| 28 | + wg_id = WgDraftFactory() |
| 29 | + wg_id.set_state(State.objects.get(type="draft", slug="rfc")) |
| 30 | + wg_id.std_level_id = "bcp" |
| 31 | + wg_id.save_with_history( |
| 32 | + [ |
| 33 | + DocEvent.objects.create( |
| 34 | + doc=wg_id, |
| 35 | + rev=wg_id.rev, |
| 36 | + type="published_rfc", |
| 37 | + by=Person.objects.get(name="(System)"), |
| 38 | + ) |
| 39 | + ] |
| 40 | + ) |
| 41 | + DocAlias.objects.create(name="rfc123456").docs.add(wg_id) |
| 42 | + DocAlias.objects.create(name="bcp123456").docs.add(wg_id) |
| 43 | + DocAlias.objects.create(name="std123456").docs.add(wg_id) |
| 44 | + DocAlias.objects.create(name="fyi123456").docs.add(wg_id) |
| 45 | + |
| 46 | + id = IndividualDraftFactory(name="draft-me-rfc123456bis") |
| 47 | + id_num = IndividualDraftFactory(name="draft-rosen-rfcefdp-update-2026") |
| 48 | + id_num_two = IndividualDraftFactory(name="draft-spaghetti-idr-deprecate-8-9-10") |
| 49 | + id_plus = IndividualDraftFactory(name="draft-odell-8+8") |
| 50 | + id_plus_end = IndividualDraftFactory(name="draft-durand-gse+") |
| 51 | + id_dot = IndividualDraftFactory(name="draft-ietf-pem-ansix9.17") |
| 52 | + charter = CharterFactory() |
| 53 | + e = NewRevisionDocEventFactory(doc=charter, rev="01") |
| 54 | + charter.rev = e.rev |
| 55 | + charter.save_with_history([e]) |
| 56 | + e = NewRevisionDocEventFactory(doc=charter, rev="01-00") |
| 57 | + charter.rev = e.rev |
| 58 | + charter.save_with_history([e]) |
| 59 | + |
12 | 60 | cases = [ |
13 | 61 | ("no change", "no change"), |
14 | | - ("bcp1", '<a href="/doc/bcp1/">bcp1</a>'), |
15 | | - ("Std 003", '<a href="/doc/std3/">Std 003</a>'), |
| 62 | + ("bCp123456", '<a href="/doc/bcp123456/">bCp123456</a>'), |
| 63 | + ("Std 00123456", '<a href="/doc/std123456/">Std 00123456</a>'), |
16 | 64 | ( |
17 | | - "FYI02 changes Std 003", |
18 | | - '<a href="/doc/fyi2/">FYI02</a> changes <a href="/doc/std3/">Std 003</a>', |
| 65 | + "FyI 0123456 changes std 00123456", |
| 66 | + '<a href="/doc/fyi123456/">FyI 0123456</a> changes <a href="/doc/std123456/">std 00123456</a>', |
19 | 67 | ), |
20 | | - ("rfc2119", '<a href="/doc/rfc2119/">rfc2119</a>'), |
21 | | - ("Rfc 02119", '<a href="/doc/rfc2119/">Rfc 02119</a>'), |
22 | | - ("draft-abc-123", '<a href="/doc/draft-abc-123/">draft-abc-123</a>'), |
| 68 | + ("rfc123456", '<a href="/doc/rfc123456/">rfc123456</a>'), |
| 69 | + ("Rfc 0123456", '<a href="/doc/rfc123456/">Rfc 0123456</a>'), |
| 70 | + (wg_id.name, f'<a href="/doc/{wg_id.name}/">{wg_id.name}</a>'), |
23 | 71 | ( |
24 | | - "draft-ietf-rfc9999-bis-01.txt", |
25 | | - '<a href="/doc/draft-ietf-rfc9999-bis/01/">draft-ietf-rfc9999-bis-01.txt</a>', |
| 72 | + f"{id.name}-{id.rev}.txt", |
| 73 | + f'<a href="/doc/{id.name}/{id.rev}/">{id.name}-{id.rev}.txt</a>', |
26 | 74 | ), |
27 | 75 | ( |
28 | | - "foo RFC 9999 draft-ietf-rfc9999-bis-01 bar", |
29 | | - 'foo <a href="/doc/rfc9999/">RFC 9999</a> <a href="/doc/draft-ietf-rfc9999-bis/01/">draft-ietf-rfc9999-bis-01</a> bar', |
| 76 | + f"foo RFC 123456 {id.name}-{id.rev} bar", |
| 77 | + f'foo <a href="/doc/rfc123456/">RFC 123456</a> <a href="/doc/{id.name}/{id.rev}/">{id.name}-{id.rev}</a> bar', |
30 | 78 | ), |
31 | 79 | ( |
32 | | - "New version available: <b>draft-bryan-sipping-p2p-03.txt</b>", |
33 | | - 'New version available: <b><a href="/doc/draft-bryan-sipping-p2p/03/">draft-bryan-sipping-p2p-03.txt</a></b>', |
| 80 | + f"New version available: <b>{id.name}-{id.rev}.txt</b>", |
| 81 | + f'New version available: <b><a href="/doc/{id.name}/{id.rev}/">{id.name}-{id.rev}.txt</a></b>', |
34 | 82 | ), |
35 | 83 | ( |
36 | | - "New version available: <b>charter-ietf-6man-04.txt</b>", |
37 | | - 'New version available: <b><a href="/doc/charter-ietf-6man/04/">charter-ietf-6man-04.txt</a></b>' |
| 84 | + f"New version available: <b>{charter.name}-{charter.rev}.txt</b>", |
| 85 | + f'New version available: <b><a href="/doc/{charter.name}/{charter.rev}/">{charter.name}-{charter.rev}.txt</a></b>', |
38 | 86 | ), |
39 | 87 | ( |
40 | | - "New version available: <b>charter-ietf-6man-03-07.txt</b>", |
41 | | - 'New version available: <b><a href="/doc/charter-ietf-6man/03-07/">charter-ietf-6man-03-07.txt</a></b>' |
| 88 | + f"New version available: <b>{charter.name}-01-00.txt</b>", |
| 89 | + f'New version available: <b><a href="/doc/{charter.name}/01-00/">{charter.name}-01-00.txt</a></b>', |
42 | 90 | ), |
43 | 91 | ( |
44 | 92 | "repository https://github.com/tlswg/draft-ietf-tls-ticketrequest", |
45 | | - 'repository https://github.com/tlswg/draft-ietf-tls-ticketrequest' |
| 93 | + "repository https://github.com/tlswg/draft-ietf-tls-ticketrequest", |
| 94 | + ), |
| 95 | + ( |
| 96 | + '<a href="mailto:draft-ietf-some-names@ietf.org">draft-ietf-some-names@ietf.org</a>', |
| 97 | + '<a href="mailto:draft-ietf-some-names@ietf.org">draft-ietf-some-names@ietf.org</a>', |
46 | 98 | ), |
47 | 99 | ( |
48 | | - "draft-madanapalli-nd-over-802.16-problems", |
49 | | - '<a href="/doc/draft-madanapalli-nd-over-802.16-problems/">draft-madanapalli-nd-over-802.16-problems</a>' |
| 100 | + "http://ieee802.org/1/files/public/docs2015/cn-thaler-Qcn-draft-PAR.pdf", |
| 101 | + "http://ieee802.org/1/files/public/docs2015/cn-thaler-Qcn-draft-PAR.pdf", |
50 | 102 | ), |
51 | 103 | ( |
52 | | - "draft-madanapalli-nd-over-802.16-problems-02.txt", |
53 | | - '<a href="/doc/draft-madanapalli-nd-over-802.16-problems/02/">draft-madanapalli-nd-over-802.16-problems-02.txt</a>' |
| 104 | + f"{id_num.name}.pdf", |
| 105 | + f'<a href="/doc/{id_num.name}/">{id_num.name}.pdf</a>', |
54 | 106 | ), |
55 | 107 | ( |
56 | | - '<a href="mailto:draft-ietf-some-names@ietf.org">draft-ietf-some-names@ietf.org</a>', |
57 | | - '<a href="mailto:draft-ietf-some-names@ietf.org">draft-ietf-some-names@ietf.org</a>', |
| 108 | + f"{id_num.name}-{id_num.rev}.txt", |
| 109 | + f'<a href="/doc/{id_num.name}/{id_num.rev}/">{id_num.name}-{id_num.rev}.txt</a>', |
58 | 110 | ), |
59 | 111 | ( |
60 | | - "http://ieee802.org/1/files/public/docs2015/cn-thaler-Qcn-draft-PAR.pdf", |
61 | | - "http://ieee802.org/1/files/public/docs2015/cn-thaler-Qcn-draft-PAR.pdf" |
62 | | - ) |
| 112 | + f"{id_num_two.name}.pdf", |
| 113 | + f'<a href="/doc/{id_num_two.name}/">{id_num_two.name}.pdf</a>', |
| 114 | + ), |
| 115 | + ( |
| 116 | + f"{id_num_two.name}-{id_num_two.rev}.txt", |
| 117 | + f'<a href="/doc/{id_num_two.name}/{id_num_two.rev}/">{id_num_two.name}-{id_num_two.rev}.txt</a>', |
| 118 | + ), |
| 119 | + ( |
| 120 | + f"{id_plus.name}", |
| 121 | + f'<a href="/doc/{id_plus.name}/">{id_plus.name}</a>', |
| 122 | + ), |
| 123 | + ( |
| 124 | + f"{id_plus.name}-{id_plus.rev}.txt", |
| 125 | + f'<a href="/doc/{id_plus.name}/{id_plus.rev}/">{id_plus.name}-{id_plus.rev}.txt</a>', |
| 126 | + ), |
| 127 | + ( |
| 128 | + f"{id_plus_end.name}", |
| 129 | + f'<a href="/doc/{id_plus_end.name}/">{id_plus_end.name}</a>', |
| 130 | + ), |
| 131 | + ( |
| 132 | + f"{id_plus_end.name}-{id_plus_end.rev}.txt", |
| 133 | + f'<a href="/doc/{id_plus_end.name}/{id_plus_end.rev}/">{id_plus_end.name}-{id_plus_end.rev}.txt</a>', |
| 134 | + ), |
| 135 | + ( |
| 136 | + f"{id_dot.name}", |
| 137 | + f'<a href="/doc/{id_dot.name}/">{id_dot.name}</a>', |
| 138 | + ), |
| 139 | + ( |
| 140 | + f"{id_dot.name}-{id_dot.rev}.txt", |
| 141 | + f'<a href="/doc/{id_dot.name}/{id_dot.rev}/">{id_dot.name}-{id_dot.rev}.txt</a>', |
| 142 | + ), |
63 | 143 | ] |
64 | 144 |
|
65 | | - # Some edge cases scraped from existing old draft names |
66 | | - for name in [ |
67 | | - # "draft-odell-8+8", # This fails since + matches the right side of \b |
68 | | - # "draft-durand-gse+", # same failure |
69 | | - "draft-kim-xcast+-few-2-few", |
70 | | - #"draft-ietf-pem-ansix9.17", # Fails because of not being greedy with . before txt |
71 | | - ]: |
72 | | - cases.append((name,f'<a href="/doc/{name}/">{name}</a>')) |
73 | | - |
74 | 145 | for input, output in cases: |
75 | 146 | #debug.show("(urlize_ietf_docs(input),output)") |
76 | 147 | self.assertEqual(urlize_ietf_docs(input), output) |
0 commit comments