first pass RT4 merge, RT#13852
[freeside.git] / rt / t / api / web-config.t
diff --git a/rt/t/api/web-config.t b/rt/t/api/web-config.t
new file mode 100644 (file)
index 0000000..fb2b362
--- /dev/null
@@ -0,0 +1,163 @@
+use strict;
+use warnings;
+use RT;
+use RT::Test nodb => 1, tests => 89;
+
+sub no_warnings_ok {
+    local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+    my $option = shift;
+    my $value  = shift;
+    my $name   = shift;
+
+    is(warnings_from($option => $value), 0, $name);
+}
+
+sub one_warning_like {
+    local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+    my $option = shift;
+    my $value  = shift;
+    my $regex  = shift;
+    my $name   = shift;
+
+    my @w = warnings_from($option => $value);
+    is(@w, 1);
+    like($w[0], $regex, $name);
+}
+
+
+sub warnings_from {
+    my $option = shift;
+    my $value  = shift;
+
+    my @warnings;
+    local $SIG{__WARN__} = sub {
+        push @warnings, $_[0];
+    };
+
+    RT->Config->Set($option => $value);
+    RT->Config->PostLoadCheck;
+
+    return @warnings;
+}
+
+# WebPath
+no_warnings_ok(WebPath => '');
+no_warnings_ok(WebPath => '/foo');
+no_warnings_ok(WebPath => '/foo/bar');
+
+one_warning_like(WebPath => '/foo/', qr/The WebPath config option requires no trailing slash/);
+
+one_warning_like(WebPath => 'foo', qr/The WebPath config option requires a leading slash/);
+
+my @w = warnings_from(WebPath => 'foo/');
+is(@w, 2);
+like($w[0], qr/The WebPath config option requires no trailing slash/);
+like($w[1], qr/The WebPath config option requires a leading slash/);
+
+one_warning_like(WebPath => '/foo/bar/', qr/The WebPath config option requires no trailing slash/);
+
+one_warning_like(WebPath => 'foo/bar', qr/The WebPath config option requires a leading slash/);
+
+@w = warnings_from(WebPath => 'foo/bar/');
+is(@w, 2);
+like($w[0], qr/The WebPath config option requires no trailing slash/);
+like($w[1], qr/The WebPath config option requires a leading slash/);
+
+one_warning_like(WebPath => '/', qr{For the WebPath config option, use the empty string instead of /});
+
+# reinstate a valid WebPath for other tests
+no_warnings_ok(WebPath => '/rt');
+
+# WebDomain
+no_warnings_ok(WebDomain => 'example.com');
+no_warnings_ok(WebDomain => 'rt.example.com');
+no_warnings_ok(WebDomain => 'localhost');
+
+one_warning_like(WebDomain => '', qr{You must set the WebDomain config option});
+
+one_warning_like(WebDomain => 'http://rt.example.com', qr{The WebDomain config option must not contain a scheme \(http://\)});
+
+one_warning_like(WebDomain => 'https://rt.example.com', qr{The WebDomain config option must not contain a scheme \(https://\)});
+
+one_warning_like(WebDomain => 'rt.example.com/path', qr{The WebDomain config option must not contain a path \(/path\)});
+
+one_warning_like(WebDomain => 'rt.example.com/path/more', qr{The WebDomain config option must not contain a path \(/path/more\)});
+
+one_warning_like(WebDomain => 'rt.example.com:80', qr{The WebDomain config option must not contain a port \(80\)});
+
+# reinstate a valid WebDomain for other tests
+no_warnings_ok(WebDomain => 'rt.example.com');
+
+# WebPort
+no_warnings_ok(WebDomain => 80);
+no_warnings_ok(WebDomain => 443);
+no_warnings_ok(WebDomain => 8888);
+
+one_warning_like(WebPort => '', qr{You must set the WebPort config option});
+
+one_warning_like(WebPort => 3.14, qr{The WebPort config option must be an integer});
+
+one_warning_like(WebPort => 'wha?', qr{The WebPort config option must be an integer});
+
+# reinstate a valid WebDomain for other tests
+no_warnings_ok(WebPort => 443);
+
+# WebBaseURL
+no_warnings_ok(WebBaseURL => 'http://rt.example.com');
+no_warnings_ok(WebBaseURL => 'HTTP://rt.example.com', 'uppercase scheme is okay');
+no_warnings_ok(WebBaseURL => 'http://rt.example.com:8888', 'nonstandard port is okay');
+no_warnings_ok(WebBaseURL => 'https://rt.example.com:8888', 'nonstandard port with https is okay');
+
+one_warning_like(WebBaseURL => '', qr{You must set the WebBaseURL config option});
+
+one_warning_like(WebBaseURL => 'rt.example.com', qr{The WebBaseURL config option must contain a scheme});
+
+one_warning_like(WebBaseURL => 'xtp://rt.example.com', qr{The WebBaseURL config option must contain a scheme \(http or https\)});
+
+one_warning_like(WebBaseURL => 'http://rt.example.com/', qr{The WebBaseURL config option requires no trailing slash});
+
+one_warning_like(WebBaseURL => 'http://rt.example.com/rt', qr{The WebBaseURL config option must not contain a path \(/rt\)});
+
+@w = warnings_from(WebBaseURL => 'http://rt.example.com/rt/');
+is(@w, 2);
+like($w[0], qr{The WebBaseURL config option requires no trailing slash});
+like($w[1], qr{The WebBaseURL config option must not contain a path \(/rt/\)});
+
+one_warning_like(WebBaseURL => 'http://rt.example.com/rt/ir', qr{The WebBaseURL config option must not contain a path \(/rt/ir\)});
+
+@w = warnings_from(WebBaseURL => 'http://rt.example.com/rt/ir/');
+is(@w, 2);
+like($w[0], qr{The WebBaseURL config option requires no trailing slash});
+like($w[1], qr{The WebBaseURL config option must not contain a path \(/rt/ir/\)});
+
+# reinstate a valid WebBaseURL for other tests
+no_warnings_ok(WebBaseURL => 'http://rt.example.com');
+
+# WebURL
+no_warnings_ok(WebURL => 'http://rt.example.com/');
+no_warnings_ok(WebURL => 'HTTP://rt.example.com/', 'uppercase scheme is okay');
+no_warnings_ok(WebURL => 'http://example.com/rt/');
+no_warnings_ok(WebURL => 'http://example.com/rt/ir/');
+no_warnings_ok(WebURL => 'http://rt.example.com:8888/', 'nonstandard port is okay');
+no_warnings_ok(WebURL => 'https://rt.example.com:8888/', 'nonstandard port with https is okay');
+
+one_warning_like(WebURL => '', qr{You must set the WebURL config option});
+
+@w = warnings_from(WebURL => 'rt.example.com');
+is(@w, 2);
+like($w[0], qr{The WebURL config option must contain a scheme});
+like($w[1], qr{The WebURL config option requires a trailing slash});
+
+one_warning_like(WebURL => 'http://rt.example.com', qr{The WebURL config option requires a trailing slash});
+
+one_warning_like(WebURL => 'xtp://example.com/rt/', qr{The WebURL config option must contain a scheme \(http or https\)});
+
+one_warning_like(WebURL => 'http://rt.example.com/rt', qr{The WebURL config option requires a trailing slash});
+
+one_warning_like(WebURL => 'http://rt.example.com/rt/ir', qr{The WebURL config option requires a trailing slash});
+
+# reinstate a valid WebURL for other tests
+no_warnings_ok(WebURL => 'http://rt.example.com/rt/');
+