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