package com.celements.model.context; import static com.celements.common.test.CelementsTestUtils.*; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; import org.easymock.IAnswer; import org.junit.Before; import org.junit.Test; import org.xwiki.configuration.ConfigurationSource; import org.xwiki.model.reference.DocumentReference; import org.xwiki.model.reference.EntityReference; import org.xwiki.model.reference.SpaceReference; import org.xwiki.model.reference.WikiReference; import com.celements.common.test.AbstractComponentTest; import com.celements.configuration.CelementsFromWikiConfigurationSource; import com.celements.model.access.IModelAccessFacade; import com.celements.model.util.ModelUtils; import com.xpn.xwiki.doc.XWikiDocument; import com.xpn.xwiki.web.Utils; public class DefaultModelContextTest extends AbstractComponentTest { private DefaultModelContext modelContext; @Before @Override public void setUp() throws Exception { super.setUp(); registerComponentMock(IModelAccessFacade.class); registerComponentMock(ConfigurationSource.class, CelementsFromWikiConfigurationSource.NAME); modelContext = (DefaultModelContext) Utils.getComponent(ModelContext.class); modelContext.defaultConfigSrc = createMockAndAddToDefault(ConfigurationSource.class); } @Test public void test_getWiki_setWiki() { WikiReference defaultWikiRef = new WikiReference("xwikidb"); assertEquals(defaultWikiRef, modelContext.getWikiRef()); WikiReference wikiRef = new WikiReference("db"); assertEquals(defaultWikiRef, modelContext.setWikiRef(wikiRef)); assertEquals(wikiRef, modelContext.getWikiRef()); } @Test public void test_getDoc_setDoc() { DocumentReference docRef = new DocumentReference("wiki", "space", "doc"); XWikiDocument doc = new XWikiDocument(docRef); replayDefault(); assertNull(modelContext.getDoc()); assertNull(modelContext.setDoc(doc)); assertEquals(doc, modelContext.getDoc()); assertEquals(doc, modelContext.setDoc(null)); assertNull(modelContext.getDoc()); verifyDefault(); } @Test public void test_getDefaultLanguage() { String lang = "xk"; expect(modelContext.wikiConfigSrc.getProperty(eq(ModelContext.CFG_KEY_DEFAULT_LANG), eq( ModelContext.FALLBACK_DEFAULT_LANG))).andReturn(lang).once(); replayDefault(); assertEquals(lang, modelContext.getDefaultLanguage()); verifyDefault(); } @Test public void test_getDefaultLanguage_wiki() { final String lang = "xk"; final WikiReference wikiRef = new WikiReference("wiki"); expect(modelContext.wikiConfigSrc.getProperty(eq(ModelContext.CFG_KEY_DEFAULT_LANG), eq( ModelContext.FALLBACK_DEFAULT_LANG))).andAnswer(new IAnswer<String>() { @Override public String answer() throws Throwable { assertEquals(wikiRef.getName(), getContext().getDatabase()); assertNull(getContext().getDoc()); return lang; } }).once(); assertDefaultContext(); replayDefault(); assertEquals(lang, modelContext.getDefaultLanguage(wikiRef)); verifyDefault(); assertDefaultContext(); } @Test public void test_getDefaultLanguage_space() throws Exception { final String lang = "xk"; final SpaceReference spaceRef = new SpaceReference("space", new WikiReference("wiki")); final DocumentReference webPrefDocRef = getWebPrefDocRef(spaceRef); expect(modelContext.defaultConfigSrc.getProperty(eq(ModelContext.CFG_KEY_DEFAULT_LANG), eq( ModelContext.FALLBACK_DEFAULT_LANG))).andAnswer(new IAnswer<String>() { @Override public String answer() throws Throwable { assertEquals(spaceRef.getParent().getName(), getContext().getDatabase()); assertEquals(webPrefDocRef, getContext().getDoc().getDocumentReference()); return lang; } }).once(); expect(getMock(IModelAccessFacade.class).getDocument(eq(webPrefDocRef))).andReturn( new XWikiDocument(webPrefDocRef)).once(); assertDefaultContext(); replayDefault(); assertEquals(lang, modelContext.getDefaultLanguage(spaceRef)); verifyDefault(); assertDefaultContext(); } @Test public void test_getDefaultLanguage_doc() throws Exception { final String lang = "xk"; final DocumentReference docRef = new DocumentReference("doc", new SpaceReference("space", new WikiReference("wiki"))); XWikiDocument doc = new XWikiDocument(docRef); expect(getMock(IModelAccessFacade.class).getDocument(eq(docRef))).andReturn(doc).once(); final DocumentReference webPrefDocRef = getWebPrefDocRef(docRef.getLastSpaceReference()); expect(modelContext.defaultConfigSrc.getProperty(eq(ModelContext.CFG_KEY_DEFAULT_LANG), eq( ModelContext.FALLBACK_DEFAULT_LANG))).andAnswer(new IAnswer<String>() { @Override public String answer() throws Throwable { assertEquals(docRef.getWikiReference().getName(), getContext().getDatabase()); assertEquals(webPrefDocRef, getContext().getDoc().getDocumentReference()); return lang; } }).once(); expect(getMock(IModelAccessFacade.class).getDocument(eq(webPrefDocRef))).andReturn( new XWikiDocument(webPrefDocRef)).once(); assertDefaultContext(); replayDefault(); assertEquals(lang, modelContext.getDefaultLanguage(docRef)); verifyDefault(); assertDefaultContext(); } @Test public void test_getDefaultLanguage_doc_onDoc() throws Exception { final String lang = "xk"; final DocumentReference docRef = new DocumentReference("doc", new SpaceReference("space", new WikiReference("wiki"))); XWikiDocument doc = new XWikiDocument(docRef); doc.setDefaultLanguage(lang); expect(getMock(IModelAccessFacade.class).getDocument(eq(docRef))).andReturn(doc).once(); assertDefaultContext(); replayDefault(); assertEquals(lang, modelContext.getDefaultLanguage(docRef)); verifyDefault(); assertDefaultContext(); } private void assertDefaultContext() { assertEquals("xwikidb", getContext().getDatabase()); assertNull(getContext().getDoc()); } private DocumentReference getWebPrefDocRef(EntityReference ref) { return Utils.getComponent(ModelUtils.class).resolveRef(ModelContext.WEB_PREF_DOC_NAME, DocumentReference.class, ref); } }