//
    // Utility method for creating the game's worlds
    // and levels hierarchy
    //
    private World createMainWorld() {
        World worldA = new World("world_a");
        World worldB = new World("world_b");

        //Reward coinReward = new VirtualItemReward(
        //    "coinReward",                       // ID
        //    "100 Coins",                        // Name
        //    ExampleAssets.COIN_CURRENCY.ID,     // Associated item ID
        //    100                                 // Amount
        //    );

        Mission likeMission = new SocialLikeMission(
            "likeMission",                      // ID
            "Like Mission",                     // Name
            //new List<Reward>() { coinReward },     // Reward
        Soomla.Profile.Provider.FACEBOOK,   // Social Provider
        "[page name]"                       // Page to "Like"
        );

        // Add 10 levels to each world
        worldA.BatchAddLevelsWithTemplates(10, null,
                                           null, new List<Mission>() { likeMission });
        worldB.BatchAddLevelsWithTemplates(10, null,
                                           null, new List<Mission>() { likeMission });

        // Create a world that will contain all worlds of the game
        World mainWorld = new World("main_world");
        mainWorld.InnerWorldsMap.Add(worldA.ID, worldA);
        mainWorld.InnerWorldsMap.Add(worldB.ID, worldB);

        return mainWorld;
    }
 public void Mission_toJSONObject()
 {
     {
         var mission = new RecordMission("Test_RecordMission_Id", "Test_RecordMission", "Test_Score_Id", 100.0);
         var json = mission.toJSONObject();
         var expect =
             @"{
     ""name"":""Test_RecordMission"",
     ""description"":"""",
     ""itemId"":""Test_RecordMission_Id"",
     ""className"":""RecordMission"",
     ""rewards"":[],
     ""gate"":{
     ""name"":"""",
     ""description"":"""",
     ""itemId"":""gate_Test_RecordMission_Id"",
     ""className"":""RecordGate"",
     ""associatedScoreId"":""Test_Score_Id"",
     ""desiredBalance"":100
     },
     ""schedule"":{
     ""className"":""Schedule"",
     ""schedRecurrence"":4,
     ""schedApprovals"":1,
     ""schedTimeRanges"":[]
     }
     }";
         Assert.AreEqual(expect, json.print(true));
     }
     {
         var mission = new WorldCompletionMission("Test_WorldCompletionMission_Id", "Test_WorldCompletionMission", "Test_World_Id");
         var json = mission.toJSONObject();
         var expect =
             @"{
     ""name"":""Test_WorldCompletionMission"",
     ""description"":"""",
     ""itemId"":""Test_WorldCompletionMission_Id"",
     ""className"":""WorldCompletionMission"",
     ""rewards"":[],
     ""gate"":{
     ""name"":"""",
     ""description"":"""",
     ""itemId"":""gate_Test_WorldCompletionMission_Id"",
     ""className"":""WorldCompletionGate"",
     ""associatedWorldId"":""Test_World_Id""
     },
     ""schedule"":{
     ""className"":""Schedule"",
     ""schedRecurrence"":4,
     ""schedApprovals"":1,
     ""schedTimeRanges"":[]
     }
     }";
         Assert.AreEqual(expect, json.print(true));
     }
     {
         var mission = new BalanceMission("Test_BalanceMission_Id", "Test_BalanceMission", "Test_Item_Id", 100);
         var json = mission.toJSONObject();
         var expect =
             @"{
     ""name"":""Test_BalanceMission"",
     ""description"":"""",
     ""itemId"":""Test_BalanceMission_Id"",
     ""className"":""BalanceMission"",
     ""rewards"":[],
     ""gate"":{
     ""name"":"""",
     ""description"":"""",
     ""itemId"":""gate_Test_BalanceMission_Id"",
     ""className"":""BalanceGate"",
     ""associatedItemId"":""Test_Item_Id"",
     ""desiredBalance"":100
     },
     ""schedule"":{
     ""className"":""Schedule"",
     ""schedRecurrence"":4,
     ""schedApprovals"":1,
     ""schedTimeRanges"":[]
     }
     }";
         Assert.AreEqual(expect, json.print(true));
     }
     {
         var mission = new PurchasingMission("Test_PurchasingMission_Id", "Test_PurchasingMission", "Test_Item_Id");
         var json = mission.toJSONObject();
         var expect =
             @"{
     ""name"":""Test_PurchasingMission"",
     ""description"":"""",
     ""itemId"":""Test_PurchasingMission_Id"",
     ""className"":""PurchasingMission"",
     ""rewards"":[],
     ""gate"":{
     ""name"":"""",
     ""description"":"""",
     ""itemId"":""gate_Test_PurchasingMission_Id"",
     ""className"":""PurchasableGate"",
     ""associatedItemId"":""Test_Item_Id""
     },
     ""schedule"":{
     ""className"":""Schedule"",
     ""schedRecurrence"":4,
     ""schedApprovals"":1,
     ""schedTimeRanges"":[]
     }
     }";
         Assert.AreEqual(expect, json.print(true));
     }
     {
         var mission = new SocialLikeMission("Test_SocialLikeMission_Id", "Test_SocialLikeMission", Provider.FACEBOOK, "Test_PageName");
         var json = mission.toJSONObject();
         var expect =
             @"{
     ""name"":""Test_SocialLikeMission"",
     ""description"":"""",
     ""itemId"":""Test_SocialLikeMission_Id"",
     ""className"":""SocialLikeMission"",
     ""rewards"":[],
     ""gate"":{
     ""name"":"""",
     ""description"":"""",
     ""itemId"":""gate_Test_SocialLikeMission_Id"",
     ""className"":""SocialLikeGate"",
     ""provider"":""facebook"",
     ""pageName"":""Test_PageName""
     },
     ""schedule"":{
     ""className"":""Schedule"",
     ""schedRecurrence"":4,
     ""schedApprovals"":1,
     ""schedTimeRanges"":[]
     }
     }";
         Assert.AreEqual(expect, json.print(true));
     }
     {
         var mission = new SocialStatusMission("Test_SocialStatusMission_Id", "Test_SocialStatusMission", Provider.GOOGLE, "Test_Status");
         var json = mission.toJSONObject();
         var expect =
             @"{
     ""name"":""Test_SocialStatusMission"",
     ""description"":"""",
     ""itemId"":""Test_SocialStatusMission_Id"",
     ""className"":""SocialStatusMission"",
     ""rewards"":[],
     ""gate"":{
     ""name"":"""",
     ""description"":"""",
     ""itemId"":""gate_Test_SocialStatusMission_Id"",
     ""className"":""SocialStatusGate"",
     ""provider"":""google"",
     ""status"":""Test_Status""
     },
     ""schedule"":{
     ""className"":""Schedule"",
     ""schedRecurrence"":4,
     ""schedApprovals"":1,
     ""schedTimeRanges"":[]
     }
     }";
         Assert.AreEqual(expect, json.print(true));
     }
     {
         var missions = new List<Mission>();
         missions.Add(new RecordMission("Test_RecordMission_Id", "Test_RecordMission", "Test_Score_Id", 100.0));
         missions.Add(new SocialLikeMission("Test_SocialLikeMission_Id", "Test_SocialLikeMission", Provider.FACEBOOK, "Test_PageName"));
         var challenge = new Challenge("Test_Challenge_Id", "Test_Challenge", missions);
         var json = challenge.toJSONObject();
         var expect =
             @"{
     ""name"":""Test_Challenge"",
     ""description"":"""",
     ""itemId"":""Test_Challenge_Id"",
     ""className"":""Challenge"",
     ""rewards"":[],
     ""schedule"":{
     ""className"":""Schedule"",
     ""schedRecurrence"":4,
     ""schedApprovals"":1,
     ""schedTimeRanges"":[]
     },
     ""missions"":[
     {
     ""name"":""Test_RecordMission"",
     ""description"":"""",
     ""itemId"":""Test_RecordMission_Id"",
     ""className"":""RecordMission"",
     ""rewards"":[],
     ""gate"":{
         ""name"":"""",
         ""description"":"""",
         ""itemId"":""gate_Test_RecordMission_Id"",
         ""className"":""RecordGate"",
         ""associatedScoreId"":""Test_Score_Id"",
         ""desiredBalance"":100
     },
     ""schedule"":{
         ""className"":""Schedule"",
         ""schedRecurrence"":4,
         ""schedApprovals"":1,
         ""schedTimeRanges"":[]
     }
     },
     {
     ""name"":""Test_SocialLikeMission"",
     ""description"":"""",
     ""itemId"":""Test_SocialLikeMission_Id"",
     ""className"":""SocialLikeMission"",
     ""rewards"":[],
     ""gate"":{
         ""name"":"""",
         ""description"":"""",
         ""itemId"":""gate_Test_SocialLikeMission_Id"",
         ""className"":""SocialLikeGate"",
         ""provider"":""facebook"",
         ""pageName"":""Test_PageName""
     },
     ""schedule"":{
         ""className"":""Schedule"",
         ""schedRecurrence"":4,
         ""schedApprovals"":1,
         ""schedTimeRanges"":[]
     }
     }
     ]
     }";
         Assert.AreEqual(expect, json.print(true));
     }
 }