// This method tests Enjin's non-runtime API methods mostly used in the editor window. private void TestStaticEndpoints() { // Helper methods. TestMethod(() => { Enjin.StoreUserData(new User(), "test"); }, "user data storage"); TestMethod <Boolean>(() => { return(Enjin.ValidateAddress("0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c")); }, true, "address validation"); TestMethod(() => { Enjin.URLGetData("https://enjincoin.io/", new System.Collections.Generic.Dictionary <string, string>()); }, "fetching URL data"); TestMethod <String>(() => { return(Enjin.URLGetData("bad URL", new System.Collections.Generic.Dictionary <string, string>())); }, string.Empty, "expected result from bad URL data"); TestMethod(() => { Enjin.ResetErrorReport(); }, "error report reset"); // CryptoItems methods. TestMethod(() => { Enjin.GetCryptoItemBalance(testingIdentityID, TESTING_ITEM_ID); }, "balance by identity"); TestMethod(() => { Enjin.GetMintableItems(TESTING_ITEM_ID); }, "mintable item retrieval"); TestMethod(() => { CryptoItem item = Enjin.GetCryptoItem(TESTING_ITEM_ID); Enjin.GetCryptoItemIDByName(item.name); }, "item identity by name"); TestMethod(() => { Enjin.GetCryptoItemBalances(testingIdentityID); }, "all balances by identity"); TestMethod(() => { Enjin.UpdateCryptoItem(new CryptoItem()); }, "item updating"); TestMethod(() => { Enjin.GetAllCryptoItems(); }, "searching all items"); TestMethod(() => { CryptoItem item = Enjin.GetCryptoItem(TESTING_ITEM_ID); Enjin.GetCryptoItemIDByName(item.name); }, "searching for item name"); TestMethod(() => { Enjin.GetAllItems(0, 0, DEVELOPER_IDENTITY_ID); }, "getting all items by page"); TestMethod(() => { Enjin.GetAllItems(DEVELOPER_IDENTITY_ID); }, "getting all items"); // Enjin Platform API methods. TestMethod(() => { Enjin.GetTotalActiveTokens(DEVELOPER_IDENTITY_ID); }, "getting all active tokens"); TestMethod(() => { Enjin.GetAppsByUserID(loginUser.id); }, "getting apps for user"); TestMethod(() => { Enjin.GetAppByID(APP_ID); }, "getting app by id"); // Identity methods. TestMethod(() => { Enjin.UpdateBalances(new Identity()); }, "identity balance updates"); TestMethod(() => { Enjin.GetIdentity(testingIdentityID); }, "identity retrieval"); TestMethod(() => { Enjin.GetAllIdentities(); }, "bulk identity retrieval"); TestMethod(() => { Enjin.SearchIdentities("enjin"); }, "identity search"); Identity sampleIdentity = new Identity { user = new Identity.User { name = loginUser.name, id = loginUser.id }, id = testingIdentityID, fields = new Fields[] { new Fields("test", "enjin", 0, 0, 0) } }; TestMethod(() => { Enjin.UpdateIdentity(sampleIdentity); }, "identity update"); Enjin.AccessToken = TESTER_TOKEN; TestMethod(() => { Enjin.UpdateIdentityFields(testingIdentityID, new Fields[] { new Fields("test", "enjin!", 0, 0, 0) }); }, "identity field update"); TestMethod(() => { Enjin.LinkIdentity(sampleIdentity); }, "identity link"); TestMethod(() => { Enjin.UnLinkIdentity(testingIdentityID); }, "identity unlinking"); TestMethod(() => { Enjin.DeleteIdentity(testingIdentityID + ""); }, "identity deletion"); TestMethod(() => { Enjin.CreateIdentity(sampleIdentity); }, "identity creation"); TestMethod(() => { Enjin.GetRoles(); }, "fetching identity roles"); TestMethod(() => { Enjin.GetIdentities(0, 0); }, "fetching identity pages"); }
/// <summary> /// Build and Draw Main Panel /// </summary> public void DrawPane(CryptoItemsController controller, GUISkin skin) { GUILayout.BeginArea(new Rect(5, 126, 912, 490), skin.GetStyle("TopBackground")); GUILayout.Space(10); EditorGUILayout.BeginHorizontal(); if (controller.HasListRefreshed) { EditorGUILayout.LabelField(new GUIContent(EnjinEditor.CurrentAppName.ToUpper()), skin.GetStyle("MainTitle")); GUILayout.FlexibleSpace(); //GUILayout.Space(16); //EditorStyles.popup.fixedHeight = 30; //EditorStyles.popup.fontSize = 12; //controller.ItemFilter = (CryptoItemsController.ItemFilterType)EditorGUILayout.EnumPopup(controller.ItemFilter, GUILayout.Width(180), GUILayout.Height(30)); //EditorStyles.popup.fixedHeight = 15; //EditorStyles.popup.fontSize = 11; } else { EditorGUILayout.LabelField(new GUIContent("SEARCH RESULTS"), skin.GetStyle("MainTitle")); } if (GUILayout.Button("REFRESH", GUILayout.Height(30), GUILayout.Width(80))) { EnjinEditor.ExecuteMethod(EnjinEditor.CallMethod.RELOADITEMS); } GUILayout.Space(10); EditorGUILayout.EndHorizontal(); if (controller.LastFilterSelected != controller.FilterSelection) { controller.LastFilterSelected = controller.FilterSelection; } GUILayout.Space(10); EditorGUILayout.BeginHorizontal(); GUILayout.Space(16); EditorGUILayout.LabelField(new GUIContent("Type"), skin.GetStyle("Subtitle"), GUILayout.Width(76)); EditorGUILayout.LabelField(new GUIContent("Name"), skin.GetStyle("Subtitle"), GUILayout.Width(100)); EditorGUILayout.LabelField(new GUIContent("Index"), skin.GetStyle("Subtitle"), GUILayout.Width(74)); EditorGUILayout.LabelField(new GUIContent("Balance"), skin.GetStyle("Subtitle"), GUILayout.Width(108)); EditorGUILayout.LabelField(new GUIContent("Total Supply"), skin.GetStyle("Subtitle"), GUILayout.Width(102)); EditorGUILayout.LabelField(new GUIContent("Total Reserve"), skin.GetStyle("Subtitle"), GUILayout.Width(98)); EditorGUILayout.LabelField(new GUIContent("Circulating"), skin.GetStyle("Subtitle"), GUILayout.Width(86)); EditorGUILayout.LabelField(new GUIContent("Transferable"), skin.GetStyle("Subtitle"), GUILayout.Width(114)); EditorGUILayout.LabelField(new GUIContent("Supply Type"), skin.GetStyle("Subtitle")); EditorGUILayout.EndHorizontal(); GUILayout.Space(10); EditorGUILayout.BeginHorizontal(); GUILayout.Space(16); _scrollPos = EditorGUILayout.BeginScrollView(_scrollPos, GUILayout.Width(890), GUILayout.Height(342)); if (EnjinEditor.CurrentUserIdentity.linking_code != string.Empty) { GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField(new GUIContent("WARNING: You don't have a wallet linked. Select the wallet tab to link your wallet"), skin.GetStyle("MainTitle")); EditorGUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); } else if (controller.CryptoItemList != null && controller.CryptoItemList.Count != 0) { for (int i = 0; i < controller.CryptoItemList.Count; i++) { if (controller.SelectedIndex == i) { EditorGUILayout.BeginHorizontal(skin.box); } else { EditorGUILayout.BeginHorizontal(); } if (controller.CryptoItemList[i].nonFungible) { EditorGUILayout.LabelField(new GUIContent("Non-fungible"), skin.GetStyle("ContentDark"), GUILayout.Width(75)); } else { EditorGUILayout.LabelField(new GUIContent("Fungible"), skin.GetStyle("ContentDark"), GUILayout.Width(75)); } Rect lastRect = GUILayoutUtility.GetLastRect(); if (GUI.Button(new Rect(lastRect.x, lastRect.y, 890.0f, lastRect.height), GUIContent.none, skin.button)) { if (controller.SelectedIndex == i) { controller.State = CryptoItemsController.CryptoItemState.VIEW; controller.CurrentCryptoItem = controller.CryptoItemList[controller.SelectedIndex]; controller.CurrentCryptoItem.itemURI = Enjin.GetCryptoItemURI(controller.CurrentCryptoItem.token_id, controller.CurrentCryptoItem.index, false); } controller.SelectedIndex = i; } GUILayout.Space(10); if (controller.CryptoItemList[i].name.Length > 40) { EditorGUILayout.LabelField(new GUIContent(controller.CryptoItemList[i].name.Substring(0, 38) + ".."), skin.GetStyle("ContentDark"), GUILayout.Width(160)); } else { EditorGUILayout.LabelField(new GUIContent(controller.CryptoItemList[i].name), skin.GetStyle("ContentDark"), GUILayout.Width(100)); } GUILayout.Space(10); try { if (controller.CryptoItemList[i].index != null) { string indexList = ""; string[] indices = controller.CryptoItemList[i].index.Split(','); for (int indexIndex = 0; indexIndex < indices.Length; indexIndex++) { int subItemIndex = 0; if (System.Int32.TryParse(indices[indexIndex], out subItemIndex)) { if (indexIndex > 0 && indexIndex < indices.Length) { indexList += ", "; } indexList += subItemIndex; } } EditorGUILayout.LabelField(new GUIContent(indexList), skin.GetStyle("ContentDark"), GUILayout.Width(50)); } else { EditorGUILayout.LabelField(new GUIContent(""), skin.GetStyle("ContentDark"), GUILayout.Width(50)); } } catch (System.Exception) { EditorGUILayout.LabelField(new GUIContent(""), skin.GetStyle("ContentDark"), GUILayout.Width(50)); } GUILayout.Space(10); EditorGUILayout.LabelField(new GUIContent(controller.CryptoItemList[i].balance.ToString()), skin.GetStyle("ContentDark"), GUILayout.Width(90)); GUILayout.Space(10); if (controller.CryptoItemList[i].supplyModel != SupplyModel.INFINITE) { if (controller.CryptoItemList[i].totalSupply.Length > 12) { EditorGUILayout.LabelField(new GUIContent(System.String.Format("{0:N0}..", System.Int32.Parse(controller.CryptoItemList[i].totalSupply.Substring(0, 9)))), skin.GetStyle("ContentDark"), GUILayout.Width(90)); } else { EditorGUILayout.LabelField(new GUIContent(System.String.Format("{0:N0}", System.Int32.Parse(controller.CryptoItemList[i].totalSupply))), skin.GetStyle("ContentDark"), GUILayout.Width(90)); } } else { EditorGUILayout.LabelField(new GUIContent("INFINITE"), skin.GetStyle("ContentDark"), GUILayout.Width(90)); } GUILayout.Space(10); EditorGUILayout.LabelField(new GUIContent(System.String.Format("{0:N0}", System.Int32.Parse(controller.CryptoItemList[i].reserve))), skin.GetStyle("ContentDark"), GUILayout.Width(80)); GUILayout.Space(10); EditorGUILayout.LabelField(new GUIContent(System.String.Format("{0:N0}", System.Int32.Parse(controller.CryptoItemList[i].circulatingSupply))), skin.GetStyle("ContentDark"), GUILayout.Width(70)); GUILayout.Space(10); EditorGUILayout.LabelField(new GUIContent(controller.CryptoItemList[i].transferable.ToString()), skin.GetStyle("ContentDark"), GUILayout.Width(100)); GUILayout.Space(10); if (controller.CryptoItemList[i].supplyModel == SupplyModel.COLLAPSING) { EditorGUILayout.LabelField(new GUIContent("COLLAPSE"), skin.GetStyle("ContentDark"), GUILayout.Width(66)); } else if (controller.CryptoItemList[i].supplyModel == SupplyModel.ANNUAL_PERCENTAGE) { EditorGUILayout.LabelField(new GUIContent("ANNUAL %"), skin.GetStyle("ContentDark"), GUILayout.Width(66)); } else if (controller.CryptoItemList[i].supplyModel == SupplyModel.ANNUAL_VALUE) { EditorGUILayout.LabelField(new GUIContent("ANNUAL #"), skin.GetStyle("ContentDark"), GUILayout.Width(66)); } else { EditorGUILayout.LabelField(new GUIContent(controller.CryptoItemList[i].supplyModel.ToString()), skin.GetStyle("ContentDark"), GUILayout.Width(66)); } if (controller.CryptoItemList[i].markedForDelete) { EditorGUILayout.LabelField(new GUIContent(skin.GetStyle("Images").normal.scaledBackgrounds[2] as Texture2D, "Marked for Deletion"), GUILayout.Width(16), GUILayout.Height(16)); } else { EditorGUILayout.LabelField(new GUIContent(""), GUILayout.Width(16), GUILayout.Height(16)); } EditorGUILayout.EndHorizontal(); GUI.backgroundColor = _bgDefault; GUILayout.Space(8); } } EditorGUILayout.EndScrollView(); EditorGUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); if (!controller.IsSearchMode && controller.CryptoItemList.Count != 0) { if (controller.CurrentPage != 1) { GUILayout.Space(10); if (GUILayout.Button(new GUIContent("<<"), GUILayout.Height(20))) { if (controller.CurrentPage != 1) { controller.CurrentPage--; controller.PageCheck(); } } } GUILayout.Space(5); for (int i = controller.FirstPage; i < controller.TotalPages + 1; i++) { if (i != controller.CurrentPage) { _numStyle = skin.GetStyle("PageNumberDark"); } else { _numStyle = skin.GetStyle("PageNumberLight"); } if (GUILayout.Button(new GUIContent(i.ToString()), _numStyle, GUILayout.Width(30))) { controller.CurrentPage = i; controller.PageCheck(); } if (i - controller.FirstPage == 9) { break; } } if (controller.CurrentPage != controller.TotalPages) { if (GUILayout.Button(new GUIContent(">>"), GUILayout.Height(20))) { if (controller.CurrentPage != controller.TotalPages) { controller.CurrentPage++; controller.PageCheck(); } } } } GUILayout.FlexibleSpace(); if (controller.CryptoItemList.Count > 0) { // =================== ADVANCED SEND TEST BUTTON ======================== //if (GUILayout.Button("A SEND", GUILayout.Width(100), GUILayout.Height(30))) //{ //CryptoItemBatch testItems = new CryptoItemBatch(EnjinEditor.CurrentUserIdentity.id); //for (int i = 0; i < controller.CryptoItemList.Count; i++) // testItems.Add(EnjinEditor.CurrentUserIdentity.ethereum_address, "0xeD7aA45fd86c4D58261B3B2Cce9f68009c76C7d1", controller.CryptoItemList[i], controller.CryptoItemList[i].balance); //testItems.Send(); //} // ====================================================================== if (GUILayout.Button("VIEW", GUILayout.Width(100), GUILayout.Height(30))) { controller.CurrentCryptoItem = controller.CryptoItemList[controller.SelectedIndex]; // On-demand loading of item URI to avoid performance issues-- this is a demanding call. if (controller.CurrentCryptoItem.itemURI == null) { controller.CurrentCryptoItem.itemURI = Enjin.GetCryptoItemURI(controller.CurrentCryptoItem.token_id, controller.CurrentCryptoItem.index, false); } controller.State = CryptoItemsController.CryptoItemState.VIEW; } if (controller.IsCreator(controller.CryptoItemList[controller.SelectedIndex].creator) && !controller.CryptoItemList[controller.SelectedIndex].markedForDelete) { if (GUILayout.Button("EDIT", GUILayout.Width(100), GUILayout.Height(30))) { controller.CurrentCryptoItem = controller.CryptoItemList[controller.SelectedIndex]; if (controller.CurrentCryptoItem.itemURI == null) { if (controller.CurrentCryptoItem.nonFungible) { controller.CurrentCryptoItem.itemURI = Enjin.GetCryptoItemURI(controller.CurrentCryptoItem.token_id, controller.CurrentCryptoItem.index, false); } else { controller.CurrentCryptoItem.itemURI = Enjin.GetCryptoItemURI(controller.CurrentCryptoItem.token_id, "0", false); } } controller.TransferFeeEnj = float.Parse((decimal.Parse(controller.CurrentCryptoItem.transferFeeSettings.value) / ((decimal)Mathf.Pow(10, 18))).ToString()); controller.NewCryptoItem.transferFeeSettings = controller.CurrentCryptoItem.transferFeeSettings; controller.EditItemName = controller.CurrentCryptoItem.name; controller.MetaDataURI = controller.CurrentCryptoItem.itemURI; controller.EditMetaDataURI = controller.MetaDataURI; controller.CurrentCryptoItem.isCreator = controller.IsCreator(controller.CurrentCryptoItem.creator); controller.MeltFee = controller.CurrentCryptoItem.meltFeeRatio * 0.01f; controller.State = CryptoItemsController.CryptoItemState.EDIT; } if (GUILayout.Button(new GUIContent("MINT"), GUILayout.Width(100), GUILayout.Height(30))) { controller.MintableCryptoItems = Enjin.GetMintableItems(controller.CryptoItemList[controller.SelectedIndex].token_id); controller.NumToMint = 1; controller.RecieverAddress = new string[1]; controller.RecieverAddress[0] = EnjinEditor.CurrentUserIdentity.ethereum_address; controller.Reserve = System.Convert.ToInt32(controller.CurrentCryptoItem.reserve); controller.MeltValue2 = (double)((float)System.Convert.ToDecimal(controller.CurrentCryptoItem.meltValue) / Mathf.Pow(10, 18)); controller.CurrentCryptoItem = controller.CryptoItemList[controller.SelectedIndex]; controller.State = CryptoItemsController.CryptoItemState.MINT; } } if (controller.CryptoItemList[controller.SelectedIndex].nonFungible == false) // || System.Int32.Parse(controller.CryptoItemList[controller.SelectedIndex].index) != 0 { if (controller.CryptoItemList[controller.SelectedIndex].balance != 0) { if (GUILayout.Button(new GUIContent("MELT"), GUILayout.Width(100), GUILayout.Height(30))) { controller.CurrentCryptoItem = controller.CryptoItemList[controller.SelectedIndex]; controller.Balance = controller.CurrentCryptoItem.balance; controller.State = CryptoItemsController.CryptoItemState.MELT; } } } } GUILayout.Space(8); EditorGUILayout.EndHorizontal(); GUILayout.Space(10); GUILayout.EndArea(); }