1 package net.pterodactylus.sone.web
3 import com.google.inject.Guice.*
5 import freenet.support.api.*
6 import net.pterodactylus.sone.core.*
7 import net.pterodactylus.sone.data.*
8 import net.pterodactylus.sone.database.*
9 import net.pterodactylus.sone.freenet.*
10 import net.pterodactylus.sone.freenet.wot.*
11 import net.pterodactylus.sone.main.*
12 import net.pterodactylus.sone.template.*
13 import net.pterodactylus.sone.test.*
14 import net.pterodactylus.sone.text.*
15 import net.pterodactylus.util.template.*
16 import org.hamcrest.MatcherAssert.*
17 import org.hamcrest.Matchers.*
20 class WebInterfaceModuleTest {
22 private val webInterfaceModule = WebInterfaceModule()
23 private val l10n = mock<BaseL10n>()
24 private val loaders = mock<Loaders>()
25 private val additionalModules = arrayOf(
26 Core::class.isProvidedByMock(),
27 SoneProvider::class.isProvidedByMock(),
28 BaseL10n::class.isProvidedBy(l10n),
29 SoneTextParser::class.isProvidedByMock(),
30 ElementLoader::class.isProvidedByMock(),
31 Loaders::class.isProvidedBy(loaders)
33 private val injector = createInjector(webInterfaceModule, *additionalModules)!!
34 private val templateContext by lazy { injector.getInstance<TemplateContextFactory>().createTemplateContext()!! }
37 fun `template context factory creates template with reflection accessor for objects`() {
38 verifyAccessor<Any, ReflectionAccessor>()
42 fun `template context factory creates template with collection accessor for collections`() {
43 verifyAccessor<Collection<*>, CollectionAccessor>()
47 fun `template context contains sone accessor for sones`() {
48 verifyAccessor<Sone, SoneAccessor>()
52 fun `template context contains post accessor for posts`() {
53 verifyAccessor<Post, PostAccessor>()
57 fun `template context contains reply accessor for replies`() {
58 verifyAccessor<Reply<*>, ReplyAccessor>()
62 fun `template context contains album accessor for albums`() {
63 verifyAccessor<Album, AlbumAccessor>()
67 fun `template context contains image accessor for images`() {
68 verifyAccessor<Image, ImageAccessor>()
72 fun `template context contains identity accessor for identities`() {
73 verifyAccessor<Identity, IdentityAccessor>()
77 fun `template context contains trust accessor for trusts`() {
78 verifyAccessor<Trust, TrustAccessor>()
82 fun `template context contains http request accessor for http requests`() {
83 verifyAccessor<HTTPRequest, HttpRequestAccessor>()
87 fun `template context contains profile accessor for profiles`() {
88 verifyAccessor<Profile, ProfileAccessor>()
91 private inline fun <reified O, reified A : Accessor> verifyAccessor() {
92 assertThat(templateContext.getAccessor(O::class.java), instanceOf(A::class.java))
96 fun `template context contains date filter`() {
97 verifyFilter<DateFilter>("date")
101 fun `template context contains html filter`() {
102 verifyFilter<HtmlFilter>("html")
106 fun `template context contains replace filter`() {
107 verifyFilter<ReplaceFilter>("replace")
111 fun `template context contains store filter`() {
112 verifyFilter<StoreFilter>("store")
116 fun `template context contains l10n filter`() {
117 verifyFilter<L10nFilter>("l10n")
121 fun `template context contains substring filter`() {
122 verifyFilter<SubstringFilter>("substring")
126 fun `template context contains xml filter`() {
127 verifyFilter<XmlFilter>("xml")
131 fun `template context contains change filter`() {
132 verifyFilter<RequestChangeFilter>("change")
136 fun `template context contains match filter`() {
137 verifyFilter<MatchFilter>("match")
141 fun `template context contains css filter`() {
142 verifyFilter<CssClassNameFilter>("css")
146 fun `template context contains js filter`() {
147 verifyFilter<JavascriptFilter>("js")
151 fun `template context contains parser filter`() {
152 verifyFilter<ParserFilter>("parse")
156 fun `template context contains shorten filter`() {
157 verifyFilter<ShortenFilter>("shorten")
161 fun `template context contains render filter`() {
162 verifyFilter<RenderFilter>("render")
166 fun `template context contains linked elements filter`() {
167 verifyFilter<LinkedElementsFilter>("linked-elements")
171 fun `template context contains linked elements render filter`() {
172 verifyFilter<LinkedElementRenderFilter>("render-linked-element")
176 fun `template context contains reparse filter`() {
177 verifyFilter<ReparseFilter>("reparse")
181 fun `template context contains unknown date filter`() {
182 verifyFilter<UnknownDateFilter>("unknown")
186 fun `unknown date filter uses correct l10n key`() {
187 whenever(l10n.getString("View.Sone.Text.UnknownDate")).thenReturn("unknown")
188 assertThat(getFilter("unknown")!!.format(null, 0L, emptyMap()), equalTo<Any>("unknown"))
192 fun `template context contains format filter`() {
193 verifyFilter<FormatFilter>("format")
197 fun `template context contains collection sort filter`() {
198 verifyFilter<CollectionSortFilter>("sort")
202 fun `template context contains image link filter`() {
203 verifyFilter<ImageLinkFilter>("image-link")
207 fun `template context contains reply group filter`() {
208 verifyFilter<ReplyGroupFilter>("replyGroup")
212 fun `template context contains contains filter`() {
213 verifyFilter<ContainsFilter>("in")
217 fun `template context unique elements filter`() {
218 verifyFilter<UniqueElementFilter>("unique")
222 fun `template context mod filter`() {
223 verifyFilter<ModFilter>("mod")
227 fun `template context pagination filter`() {
228 verifyFilter<PaginationFilter>("paginate")
231 private inline fun <reified F : Filter> verifyFilter(name: String) {
232 assertThat(getFilter(name), instanceOf(F::class.java))
235 private fun getFilter(name: String): Filter? = templateContext.getFilter(name)
238 fun `template context factory is created as singleton`() {
239 val factory1 = injector.getInstance<TemplateContextFactory>()
240 val factory2 = injector.getInstance<TemplateContextFactory>()
241 assertThat(factory1, sameInstance(factory2))
245 fun `template from classpath is returned`() {
246 val template = Template()
247 templateContext["testTemplate"] = template
248 assertThat(templateContext.getTemplate("testTemplate"), sameInstance(template))
252 fun `template from loaders’ provider is returned`() {
253 val template = Template()
254 whenever(loaders.templateProvider).thenReturn(TemplateProvider { _, templateName ->
255 template.takeIf { templateName == "testTemplate" }
257 assertThat(templateContext.getTemplate("testTemplate"), sameInstance(template))