1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2024-09-28 14:30:51 +00:00

Personal_wikis: Assert name prop is in wiki.core

This commit is contained in:
gnosygnu 2017-02-18 08:16:45 -05:00
parent 083ab133f7
commit 04a58326e2
3 changed files with 33 additions and 14 deletions

View File

@ -37,24 +37,24 @@ abstract class Xowdir_wiki_props_mgr__base implements Xowdir_wiki_props_mgr {
public Xowdir_wiki_props Verify(boolean mode_is_import, String domain, Io_url core_db_url) {
Xowdir_wiki_props rv = new Xowdir_wiki_props();
Verify_or_fix(rv, core_db_url, Xowd_cfg_key_.Key__wiki_core__domain);
Verify_or_fix(rv, core_db_url, Xowd_cfg_key_.Key__init__main_page);
Verify_or_fix(rv, core_db_url, Xowd_cfg_key_.Key__wiki_core__name);
Verify_or_fix(rv, mode_is_import, core_db_url, Xowd_cfg_key_.Key__wiki_core__domain);
Verify_or_fix(rv, mode_is_import, core_db_url, Xowd_cfg_key_.Key__init__main_page);
Verify_or_fix(rv, mode_is_import, core_db_url, Xowd_cfg_key_.Key__wiki_core__name);
return rv;
}
private String Verify_or_fix(Xowdir_wiki_props props, Io_url core_db_url, String key) {
private String Verify_or_fix(Xowdir_wiki_props props, boolean mode_is_import, Io_url core_db_url, String key) {
String val = Wiki_cfg__select_or(key, null);
if (val == null) {
props.Dirty_y_();
usr_dlg.Warn_many("", "", "xowdir: core_db.xowa_cfg does not have val; url=~{0} key=~{1}", core_db_url, key);
val = Fix(props, core_db_url, key);
val = Fix(props, mode_is_import, core_db_url, key);
Wiki_cfg__upsert(key, val);
}
props.Set(key, val);
return val;
}
private static String Fix(Xowdir_wiki_props props, Io_url core_db_url, String key) {
private String Fix(Xowdir_wiki_props props, boolean mode_is_import, Io_url core_db_url, String key) {
if (String_.Eq(key, Xowd_cfg_key_.Key__wiki_core__domain)) {
String rv = core_db_url.NameOnly();
if (String_.Has_at_end(rv, "-core"))
@ -62,7 +62,12 @@ abstract class Xowdir_wiki_props_mgr__base implements Xowdir_wiki_props_mgr {
return rv;
}
else if (String_.Eq(key, Xowd_cfg_key_.Key__wiki_core__name)) {
return props.Domain(); // NOTE: must be called after domain
if (mode_is_import)
return props.Domain(); // NOTE: must be called after domain
else {
Xowdir_wiki_json wiki_json = Xowdir_wiki_json.New_by_json(new Json_parser(), User_reg__select(props.Domain()));
return wiki_json.Name();
}
}
else if (String_.Eq(key, Xowd_cfg_key_.Key__init__main_page)) {
return Xoa_page_.Main_page_str;

View File

@ -16,37 +16,49 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.addons.wikis.directorys.dbs; import gplx.*; import gplx.xowa.*; import gplx.xowa.addons.*; import gplx.xowa.addons.wikis.*; import gplx.xowa.addons.wikis.directorys.*;
import org.junit.*; import gplx.core.tests.*; import gplx.xowa.wikis.data.*;
import org.junit.*; import gplx.core.tests.*;
import gplx.langs.jsons.*;
import gplx.xowa.wikis.data.*;
public class Xowdir_wiki_props_mgr__tst {
private final Xowdir_wiki_props_mgr__fxt fxt = new Xowdir_wiki_props_mgr__fxt();
@Test public void Import__wiki__missing_all() {
// handle all imported .xowa wikis pre v4.3
fxt.Init__props(null, null, null);
fxt.Init__wiki_props(null, null, null);
fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.Y, fxt.Make__json("test", "test", "Main_Page"));
}
@Test public void Import__wiki__missing_domain() {
// handle personal wikis from v4.2
fxt.Init__props(null, null, "Main_Page");
fxt.Init__wiki_props(null, null, "Main_Page");
fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.Y, fxt.Make__json("test", "test", "Main_Page"));
}
@Test public void Import__wiki__wmf_domain() {
// handle wmf wikis with a core-file of "test-core.xowa"
fxt.Init__props(null, null, "Main_Page");
fxt.Init__wiki_props(null, null, "Main_Page");
fxt.Test__verify(Bool_.Y, "/dir/test-core.xowa", Bool_.Y, fxt.Make__json("test", "test", "Main_Page"));
}
@Test public void Import__wiki__clean() {
// handle clean wiki
fxt.Init__props("test", "test", "Main_Page");
fxt.Init__wiki_props("test", "test", "Main_Page");
fxt.Test__verify(Bool_.Y, "/dir/test.xowa", Bool_.N, fxt.Make__json("test", "test", "Main_Page"));
}
@Test public void Open__wiki__missing_name() {
// handle missing name
fxt.Init__user_json("test", "my test", "Main_Page");
fxt.Init__wiki_props(null, null, "Main_Page");
fxt.Test__verify(Bool_.N, "/dir/test.xowa", Bool_.Y, fxt.Make__json("test", "my test", "Main_Page"));
}
}
class Xowdir_wiki_props_mgr__fxt {
private final Xowdir_wiki_props_mgr mgr = new Xowdir_wiki_props_mgr__mock();
public Xowdir_wiki_props Make__json(String domain, String name, String main_page) {
return new Xowdir_wiki_props(domain, name, main_page);
}
public void Init__props(String domain, String name, String main_page) {
public void Init__user_json(String domain, String name, String main_page) {
Xowdir_wiki_json wiki_json = new Xowdir_wiki_json(name, main_page);
mgr.User_reg__upsert(domain, wiki_json.To_str(new Json_wtr()));
}
public void Init__wiki_props(String domain, String name, String main_page) {
mgr.Wiki_cfg__upsert(Xowd_cfg_key_.Key__wiki_core__domain, domain);
mgr.Wiki_cfg__upsert(Xowd_cfg_key_.Key__wiki_core__name, name);
mgr.Wiki_cfg__upsert(Xowd_cfg_key_.Key__init__main_page, main_page);

View File

@ -44,7 +44,9 @@ public class Xowdir_item_doc implements Mustache_doc_itm {
}
public static final Xowdir_item_doc[] Ary_empty = new Xowdir_item_doc[0];
public static Xowdir_item_doc New(Xowdir_wiki_itm itm) {return new Xowdir_item_doc(itm.Id(), itm.Domain(), itm.Json().Name(), itm.Url().OwnerDir().Xto_api(), itm.Json().Main_page());}
public static Xowdir_item_doc New(Xowdir_wiki_itm itm) {
return new Xowdir_item_doc(itm.Id(), itm.Domain(), itm.Json().Name(), itm.Url().OwnerDir().Xto_api(), itm.Json().Main_page());
}
public static Xowdir_item_doc[] New_ary(Xowdir_wiki_itm[] itms_ary) {
int len = itms_ary.length;
Xowdir_item_doc[] rv = new Xowdir_item_doc[itms_ary.length];