🎨 Refactoring
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / freenet / wot / WebOfTrustConnectorTest.kt
1 package net.pterodactylus.sone.freenet.wot
2
3 import freenet.support.*
4 import freenet.support.api.*
5 import net.pterodactylus.sone.freenet.*
6 import net.pterodactylus.sone.freenet.plugin.*
7 import net.pterodactylus.sone.test.*
8 import org.hamcrest.*
9 import org.hamcrest.MatcherAssert.*
10 import org.hamcrest.Matchers.*
11 import org.hamcrest.core.*
12 import kotlin.test.*
13
14 /**
15  * Unit test for [WebOfTrustConnector].
16  */
17 class WebOfTrustConnectorTest {
18
19         private val ownIdentity = DefaultOwnIdentity("id", "nickname", "requestUri", "insertUri")
20
21         @Test
22         fun `wot plugin can be pinged`() {
23                 val pluginConnector = createPluginConnector("Ping")
24                 val connector = WebOfTrustConnector(pluginConnector)
25                 connector.ping()
26         }
27
28         @Test
29         fun `own identities are returned correctly`() {
30                 val pluginConnector = createPluginConnector("GetOwnIdentities") {
31                         put("Identity0", "id-0")
32                         put("RequestURI0", "request-uri-0")
33                         put("InsertURI0", "insert-uri-0")
34                         put("Nickname0", "nickname-0")
35                         put("Contexts0.Context0", "id-0-context-0")
36                         put("Properties0.Property0.Name", "id-0-property-0-name")
37                         put("Properties0.Property0.Value", "id-0-property-0-value")
38                         put("Identity1", "id-1")
39                         put("RequestURI1", "request-uri-1")
40                         put("InsertURI1", "insert-uri-1")
41                         put("Nickname1", "nickname-1")
42                         put("Contexts1.Context0", "id-1-context-0")
43                         put("Properties1.Property0.Name", "id-1-property-0-name")
44                         put("Properties1.Property0.Value", "id-1-property-0-value")
45                 }
46                 val connector = WebOfTrustConnector(pluginConnector)
47                 val ownIdentities = connector.loadAllOwnIdentities()
48                 assertThat(ownIdentities, containsInAnyOrder(
49                                 isOwnIdentity("id-0", "nickname-0", "request-uri-0", "insert-uri-0", contains("id-0-context-0"), hasEntry("id-0-property-0-name", "id-0-property-0-value")),
50                                 isOwnIdentity("id-1", "nickname-1", "request-uri-1", "insert-uri-1", contains("id-1-context-0"), hasEntry("id-1-property-0-name", "id-1-property-0-value"))
51                 ))
52         }
53
54         @Test
55         fun `trusted identities are requested with correct own identity`() {
56                 val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("Truster", equalTo("id")))
57                 val connector = WebOfTrustConnector(pluginConnector)
58                 connector.loadTrustedIdentities(ownIdentity)
59         }
60
61         @Test
62         fun `trusted identities are requested with correct selection parameter`() {
63                 val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("Selection", equalTo("+")))
64                 val connector = WebOfTrustConnector(pluginConnector)
65                 connector.loadTrustedIdentities(ownIdentity)
66         }
67
68         @Test
69         fun `trusted identities are requested with empty context if null context requested`() {
70                 val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("Context", equalTo("")))
71                 val connector = WebOfTrustConnector(pluginConnector)
72                 connector.loadTrustedIdentities(ownIdentity)
73         }
74
75         @Test
76         fun `trusted identities are requested with context if context requested`() {
77                 val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("Context", equalTo("TestContext")))
78                 val connector = WebOfTrustConnector(pluginConnector)
79                 connector.loadTrustedIdentities(ownIdentity, "TestContext")
80         }
81
82         @Test
83         fun `trusted identities are requested with trust values`() {
84                 val pluginConnector = createPluginConnector("GetIdentitiesByScore", hasField("WantTrustValues", equalTo("true")))
85                 val connector = WebOfTrustConnector(pluginConnector)
86                 val trustedIdentities = connector.loadTrustedIdentities(ownIdentity)
87         }
88
89         @Test
90         fun `empty list of trusted identities is returned correctly`() {
91                 val pluginConnector = createPluginConnector("GetIdentitiesByScore")
92                 val connector = WebOfTrustConnector(pluginConnector)
93                 val trustedIdentities = connector.loadTrustedIdentities(ownIdentity)
94                 assertThat(trustedIdentities, empty())
95         }
96
97         @Test
98         fun `trusted identities without context, properties, or trust value are returned correctly`() {
99                 val pluginConnector = createPluginConnector("GetIdentitiesByScore") {
100                         put("Identity0", "id0")
101                         put("Nickname0", "nickname0")
102                         put("RequestURI0", "request-uri0")
103                         put("Identity1", "id1")
104                         put("Nickname1", "nickname1")
105                         put("RequestURI1", "request-uri1")
106                 }
107                 val connector = WebOfTrustConnector(pluginConnector)
108                 val trustedIdentities = connector.loadTrustedIdentities(ownIdentity)
109                 assertThat(trustedIdentities, contains(
110                                 allOf(
111                                                 isIdentity("id0", "nickname0", "request-uri0", empty<String>(), isEmptyMap()),
112                                                 isTrusted(ownIdentity, isTrust(null, 0, 0))
113                                 ),
114                                 allOf(
115                                                 isIdentity("id1", "nickname1", "request-uri1", empty<String>(), isEmptyMap()),
116                                                 isTrusted(ownIdentity, isTrust(null, 0, 0))
117                                 )
118                 ))
119         }
120
121         @Test
122         fun `trusted identity with contexts is returned correctly`() {
123                 val pluginConnector = createPluginConnector("GetIdentitiesByScore") {
124                         put("Identity0", "id0")
125                         put("Nickname0", "nickname0")
126                         put("RequestURI0", "request-uri0")
127                         put("Contexts0.Context0", "Context0")
128                         put("Contexts0.Context1", "Context1")
129                 }
130                 val connector = WebOfTrustConnector(pluginConnector)
131                 val trustedIdentities = connector.loadTrustedIdentities(ownIdentity)
132                 assertThat(trustedIdentities, contains(
133                                 isIdentity("id0", "nickname0", "request-uri0", containsInAnyOrder("Context0", "Context1"), isEmptyMap())
134                 ))
135         }
136
137         @Test
138         fun `trusted identity with properties is returned correctly`() {
139                 val pluginConnector = createPluginConnector("GetIdentitiesByScore") {
140                         put("Identity0", "id0")
141                         put("Nickname0", "nickname0")
142                         put("RequestURI0", "request-uri0")
143                         put("Properties0.Property0.Name", "foo")
144                         put("Properties0.Property0.Value", "bar")
145                         put("Properties0.Property1.Name", "baz")
146                         put("Properties0.Property1.Value", "quo")
147                 }
148                 val connector = WebOfTrustConnector(pluginConnector)
149                 val trustedIdentities = connector.loadTrustedIdentities(ownIdentity)
150                 assertThat(trustedIdentities, contains(
151                                 isIdentity("id0", "nickname0", "request-uri0", empty(), allOf(hasEntry("foo", "bar"), hasEntry("baz", "quo")))
152                 ))
153         }
154
155         @Test
156         fun `trusted identity with trust value is returned correctly`() {
157                 val pluginConnector = createPluginConnector("GetIdentitiesByScore") {
158                         put("Identity0", "id0")
159                         put("Nickname0", "nickname0")
160                         put("RequestURI0", "request-uri0")
161                         put("Trust0", "12")
162                         put("Score0", "34")
163                         put("Rank0", "56")
164                 }
165                 val connector = WebOfTrustConnector(pluginConnector)
166                 val trustedIdentities = connector.loadTrustedIdentities(ownIdentity)
167                 assertThat(trustedIdentities, contains(
168                                 allOf(
169                                                 isIdentity("id0", "nickname0", "request-uri0", empty(), isEmptyMap()),
170                                                 isTrusted(ownIdentity, isTrust(12, 34, 56))
171                                 )
172                 ))
173         }
174
175 }
176
177 fun createPluginConnector(message: String, fieldsMatcher: Matcher<SimpleFieldSet> = IsAnything<SimpleFieldSet>(), build: SimpleFieldSetBuilder.() -> Unit = {}) =
178                 object : PluginConnector {
179                         override fun sendRequest(pluginName: String, identifier: String, fields: SimpleFieldSet, data: Bucket?) =
180                                         if ((pluginName != wotPluginName) || (fields.get("Message") != message)) {
181                                                 throw PluginException()
182                                         } else {
183                                                 assertThat(fields, fieldsMatcher)
184                                                 PluginReply(SimpleFieldSetBuilder().apply(build).get(), null)
185                                         }
186                 }
187
188 private const val wotPluginName = "plugins.WebOfTrust.WebOfTrust"