1 #include "http_utility.hpp"
2
3 #include <array>
4
5 #include <gtest/gtest.h> // IWYU pragma: keep
6
7 // IWYU pragma: no_include <gtest/gtest-message.h>
8 // IWYU pragma: no_include <gtest/gtest-test-part.h>
9 // IWYU pragma: no_include "gtest/gtest_pred_impl.h"
10
11 namespace http_helpers
12 {
13 namespace
14 {
15
TEST(isContentTypeAllowed,PositiveTest)16 TEST(isContentTypeAllowed, PositiveTest)
17 {
18 EXPECT_TRUE(isContentTypeAllowed("*/*", ContentType::HTML, true));
19 EXPECT_TRUE(isContentTypeAllowed("application/octet-stream",
20 ContentType::OctetStream, false));
21 EXPECT_TRUE(isContentTypeAllowed("text/html", ContentType::HTML, false));
22 EXPECT_TRUE(
23 isContentTypeAllowed("application/json", ContentType::JSON, false));
24 EXPECT_TRUE(
25 isContentTypeAllowed("application/cbor", ContentType::CBOR, false));
26 EXPECT_TRUE(isContentTypeAllowed("application/json, text/html",
27 ContentType::HTML, false));
28 }
29
TEST(isContentTypeAllowed,NegativeTest)30 TEST(isContentTypeAllowed, NegativeTest)
31 {
32 EXPECT_FALSE(isContentTypeAllowed("application/octet-stream",
33 ContentType::HTML, false));
34 EXPECT_FALSE(
35 isContentTypeAllowed("application/html", ContentType::JSON, false));
36 EXPECT_FALSE(
37 isContentTypeAllowed("application/json", ContentType::CBOR, false));
38 EXPECT_FALSE(
39 isContentTypeAllowed("application/cbor", ContentType::HTML, false));
40 EXPECT_FALSE(isContentTypeAllowed("application/json, text/html",
41 ContentType::OctetStream, false));
42 }
43
TEST(isContentTypeAllowed,ContainsAnyMimeTypeReturnsTrue)44 TEST(isContentTypeAllowed, ContainsAnyMimeTypeReturnsTrue)
45 {
46 EXPECT_TRUE(
47 isContentTypeAllowed("text/html, */*", ContentType::OctetStream, true));
48 }
49
TEST(isContentTypeAllowed,ContainsQFactorWeightingReturnsTrue)50 TEST(isContentTypeAllowed, ContainsQFactorWeightingReturnsTrue)
51 {
52 EXPECT_TRUE(isContentTypeAllowed("text/html, */*;q=0.8",
53 ContentType::OctetStream, true));
54 }
55
TEST(getPreferredContentType,PositiveTest)56 TEST(getPreferredContentType, PositiveTest)
57 {
58 std::array<ContentType, 1> contentType{ContentType::HTML};
59 EXPECT_EQ(
60 getPreferredContentType("text/html, application/json", contentType),
61 ContentType::HTML);
62
63 std::array<ContentType, 2> htmlJson{ContentType::HTML, ContentType::JSON};
64 EXPECT_EQ(getPreferredContentType("text/html, application/json", htmlJson),
65 ContentType::HTML);
66
67 std::array<ContentType, 2> jsonHtml{ContentType::JSON, ContentType::HTML};
68 EXPECT_EQ(getPreferredContentType("text/html, application/json", jsonHtml),
69 ContentType::HTML);
70
71 std::array<ContentType, 2> cborJson{ContentType::CBOR, ContentType::JSON};
72 EXPECT_EQ(getPreferredContentType("application/cbor, application::json",
73 cborJson),
74 ContentType::CBOR);
75
76 EXPECT_EQ(getPreferredContentType("application/json", cborJson),
77 ContentType::JSON);
78 EXPECT_EQ(getPreferredContentType("*/*", cborJson), ContentType::ANY);
79 }
80
TEST(getPreferredContentType,NegativeTest)81 TEST(getPreferredContentType, NegativeTest)
82 {
83 std::array<ContentType, 1> contentType{ContentType::CBOR};
84 EXPECT_EQ(
85 getPreferredContentType("text/html, application/json", contentType),
86 ContentType::NoMatch);
87 }
88 } // namespace
89 } // namespace http_helpers
90