1// Copyright 2017 The Gitea Authors. All rights reserved.
2// SPDX-License-Identifier: MIT
3
4package validation
5
6import (
7 "testing"
8
9 "code.forgejo.org/go-chi/binding"
10)
11
12var urlValidationTestCases = []validationTestCase{
13 {
14 description: "Empty URL",
15 data: TestForm{
16 URL: "",
17 },
18 expectedErrors: binding.Errors{},
19 },
20 {
21 description: "URL without port",
22 data: TestForm{
23 URL: "http://test.lan/",
24 },
25 expectedErrors: binding.Errors{},
26 },
27 {
28 description: "URL with port",
29 data: TestForm{
30 URL: "http://test.lan:3000/",
31 },
32 expectedErrors: binding.Errors{},
33 },
34 {
35 description: "URL with IPv6 address without port",
36 data: TestForm{
37 URL: "http://[::1]/",
38 },
39 expectedErrors: binding.Errors{},
40 },
41 {
42 description: "URL with IPv6 address with port",
43 data: TestForm{
44 URL: "http://[::1]:3000/",
45 },
46 expectedErrors: binding.Errors{},
47 },
48 {
49 description: "Invalid URL",
50 data: TestForm{
51 URL: "http//test.lan/",
52 },
53 expectedErrors: binding.Errors{
54 binding.Error{
55 FieldNames: []string{"URL"},
56 Classification: binding.ERR_URL,
57 Message: "Url",
58 },
59 },
60 },
61 {
62 description: "Invalid schema",
63 data: TestForm{
64 URL: "ftp://test.lan/",
65 },
66 expectedErrors: binding.Errors{
67 binding.Error{
68 FieldNames: []string{"URL"},
69 Classification: binding.ERR_URL,
70 Message: "Url",
71 },
72 },
73 },
74 {
75 description: "Invalid port",
76 data: TestForm{
77 URL: "http://test.lan:3x4/",
78 },
79 expectedErrors: binding.Errors{
80 binding.Error{
81 FieldNames: []string{"URL"},
82 Classification: binding.ERR_URL,
83 Message: "Url",
84 },
85 },
86 },
87 {
88 description: "Invalid port with IPv6 address",
89 data: TestForm{
90 URL: "http://[::1]:3x4/",
91 },
92 expectedErrors: binding.Errors{
93 binding.Error{
94 FieldNames: []string{"URL"},
95 Classification: binding.ERR_URL,
96 Message: "Url",
97 },
98 },
99 },
100}
101
102func Test_ValidURLValidation(t *testing.T) {
103 AddBindingRules()
104
105 for _, testCase := range urlValidationTestCases {
106 t.Run(testCase.description, func(t *testing.T) {
107 performValidationTest(t, testCase)
108 })
109 }
110}