public async Task NEW_EDIT_BEGINSAVE_GET() { MultiLineTextEdit newMultiLineTextEdit = null; MultiLineTextEdit savedMultiLineTextEdit = null; MultiLineTextEdit gottenMultiLineTextEdit = null; string mltTitle = "My Test MLT Title Here"; string lineAText = "MultiLineTextTests.neweditbeginsaveget.Test Line A Text. This is line A in English."; string lineBText = "MultiLineTextTests.neweditbeginsaveget.Test Line BBBB Text. This is line B in English."; //LineEdit lineA = null; //LineEdit lineB = null; bool gottenMultiLineTextLinesCountIsTwo = false; bool gottenMultiLineTextContainsLineA = false; bool gottenMultiLineTextContainsLineB = false; var isAsyncComplete = false; var hasError = false; EnqueueConditional(() => isAsyncComplete); await Setup(); try { //NEW UP THE MULTILINETEXT newMultiLineTextEdit = await MultiLineTextEdit.NewMultiLineTextEditAsync(); //EDIT //TITLE MLT newMultiLineTextEdit.Title = mltTitle; //CREATE LINES IN A LINELIST //1) CREATE LINE INFO DICTIONARY var lineInfoDictionary = new Dictionary<int, string>(); lineInfoDictionary.Add(0, lineAText); lineInfoDictionary.Add(1, lineBText); //2) LANGUAGE TEXT var linesLanguageText = SeedData.Ton.EnglishText; //3) CRITERIA var criteria = new Business.Criteria.LineInfosCriteria(linesLanguageText, lineInfoDictionary); //4) CREATE LINES var lineList = await LineList.NewLineListAsync(criteria); //5) ASSIGN LINES newMultiLineTextEdit.Lines = lineList; savedMultiLineTextEdit = await newMultiLineTextEdit.SaveAsync(); //GET (CONFIRM SAVE) gottenMultiLineTextEdit = await MultiLineTextEdit.GetMultiLineTextEditAsync(savedMultiLineTextEdit.Id); gottenMultiLineTextLinesCountIsTwo = (gottenMultiLineTextEdit.Lines.Count == 2); gottenMultiLineTextContainsLineA = (from line in gottenMultiLineTextEdit.Lines where line.LineNumber == 0 select line).First().Phrase.Text == lineAText; gottenMultiLineTextContainsLineB = (from line in gottenMultiLineTextEdit.Lines where line.LineNumber == 1 select line).First().Phrase.Text == lineBText; } catch { hasError = true; } finally { EnqueueCallback( () => Assert.IsFalse(hasError), () => Assert.IsTrue(gottenMultiLineTextLinesCountIsTwo), () => Assert.IsTrue(gottenMultiLineTextContainsLineA), () => Assert.IsTrue(gottenMultiLineTextContainsLineB), () => Assert.IsNotNull(newMultiLineTextEdit), () => Assert.IsNotNull(savedMultiLineTextEdit), () => Assert.IsNotNull(gottenMultiLineTextEdit), () => Assert.AreEqual(savedMultiLineTextEdit.Id, gottenMultiLineTextEdit.Id) ); EnqueueTestComplete(); Teardown(); isAsyncComplete = true; } }
public override async Task SaveAsync() { IsSaving = true; IncrementApplicationBusyEventMessage.Publish("AddSongMultiLineTextEditViewModel.SaveAsync"); //DisableNavigationRequestedEventMessage.Publish(); var thinkId = Guid.NewGuid(); History.Events.ThinkingAboutTargetEvent.Publish(thinkId); try { //TODO: PUT ALL SAVE SONG STUFF INTO ONE SAVER COMMAND OBJECT. THIS OBJECT SHOULD TAKE THE ENTERED SONG INFO, PARSE THE SONG, AND SAVE ALL SUBPHRASES AS WE DO HERE. THIS SHOULD *NOT* GO INTO THE SONGEDIT MODEL SAVE, AS THE SONG MODEL SHOULD NOT PARSE EVERY TIME IT IS SAVED. ///when we save the song lyrics, we want to... /// 1) Parse each text line into a subphrase, parse each subphrase into a word-subphrase /// if subphrase is unique and not already in the database, save that subphrase /// 2) Create LineEdits from text lines and add these to the song model. /// 3) Save the song model itself. ///e.g. /// this is line one /// this is line two /// this is line three /// subphrases: "this is line one" "this is line two" "this is line three" /// word-subphrases: "this" "is" "line" "one" "two" "three" #region PARSE THE SONGTEXT INTO LINES AND ADD TO MODEL.LINES { var songText = SongText; var languageText = SongLanguage.Text; var lines = songText.ParseIntoLines(); //removes empty entries var words = songText.ParseIntoWords(); var wordCount = words.Count; var escapeHelper = 0; while (words.Contains("")) { History.Events.ThinkedAboutTargetEvent.Publish(); //ESCAPE HELPER TO ESCAPE IN CASE OF INFINITE LOOP WITH WHILE STATEMENT. //I WANT THE WHILE LOOP TO USE THE QUICKNESS OF CONTAINS(), //AS OPPOSED TO FOREACH-ING OR FOR-ING. BUT I HATE POSSIBILITY OF //ENDLESS LOOP, EVEN THOUGH I DON'T SEE HOW IT COULD HAPPEN. words.Remove(""); escapeHelper++; if (escapeHelper > wordCount) { break; } } //I'M CHANGING THIS TO UTILIZE MY LINELIST.NEWLINELIST(INFOS) ALREADY IN //PLACE. //SO AT THIS TIME, WE ONLY NEED TO SAVE THE WORDS THEMSELVES. THE LINES //WILL BE SAVED IN FUTURE STEP IN THIS BLOCK. var allWords = new List <string>(words); #region REMOVE ALL WORDS THAT ALREADY EXIST IN DB, SO THAT WE ARE LEFT WITH ONLY NEW WORDS //WE DON'T WANT TO ADD DUPLICATE WORDS TO THE DB, SO CHECK TO SEE IF ANY //OF THESE WORDS ALREADY EXIST IN DB. var removeCmd = await RemoveAlreadyExistingPhraseTextsCommand.ExecuteAsync(languageText, allWords); var allWordsNotAlreadyInDatabase = removeCmd.PrunedPhraseTexts; #region CREATE PHRASE FOR EACH NEW WORD var criteria = new Business.Criteria.PhraseTextsCriteria(languageText, allWordsNotAlreadyInDatabase); History.Events.ThinkedAboutTargetEvent.Publish(); var phraseListContainingAllWordsNotAlreadyInDatabase = await PhraseList.NewPhraseListAsync(criteria); History.Events.ThinkedAboutTargetEvent.Publish(); #region SAVE ALL WORDS THAT ARE NEW (NOT ALREADY IN DATABASE) //phraseListContainingAllWordsNotAlreadyInDatabase = // await phraseListContainingAllWordsNotAlreadyInDatabase.SaveAsync(); //SO NOW, ALL OF OUR SONG'S WORDS THAT WERE NOT ALREADY IN THE DATABASE //ARE INDEED NOW STORED IN THE DATABASE. #region CREATE LINEEDIT OBJECTS FOR EACH TEXT LINE AND ADD TO MODEL var lineInfoDictionary = new Dictionary <int, string>(); for (int i = 0; i < lines.Count; i++) { History.Events.ThinkedAboutTargetEvent.Publish(); lineInfoDictionary.Add(i, lines[i]); } //WE NOW HAVE INFO DICTIONARY WHICH HAS LINE NUMBER AND CORRESPONDING LINE TEXT //CREATE A NEW LINELIST WITH THIS CRITERIA WILL CREATE PHRASES WITH EACH LINE TEXT, //AND LINEEDITS OBJECT FOR EACH LINE NUMBER + PHRASE. var criteria2 = new Business.Criteria.LineInfosCriteria(languageText, lineInfoDictionary); Model.Lines = await LineList.NewLineListAsync(criteria2); //WE NOW HAVE A LIST OF LINEEDITS, EACH WITH A PHRASE WITH A SINGLE LINE OF TEXT AND LINE NUMBER. //SET OUR MODEL.LINES TO THIS LINELIST History.Events.ThinkedAboutTargetEvent.Publish(); #region SET SONG TITLE (IF NECESSARY) //IF THE SONGTITLE IS EMPTY, THEN USE THE FIRST LINE OF THE SONG AS THE SONG TITLE if (string.IsNullOrEmpty(Model.Title)) { Model.Title = ViewViewModelResources.AutoTitlePrefix + Model.Lines.GetLine(0).Phrase.Text; } #endregion History.Events.ThinkedAboutTargetEvent.Publish(); #region ADD METADATA TYPEISSONG Model.AddMetadata(BusinessResources.MetadataKeyType, BusinessResources.MetadataValueTypeSong); #endregion #region SAVE THE ACTUAL SONG MODEL //NOW WE CAN USE THE BASE SAVE History.Events.ThinkedAboutTargetEvent.Publish(); await base.SaveAsync(); SongHasBeenSaved = true; IsSaving = false; History.Events.ThinkedAboutTargetEvent.Publish(); #endregion #endregion #endregion #endregion #endregion } #endregion } finally { History.Events.ThinkedAboutTargetEvent.Publish(thinkId); //EnableNavigationRequestedEventMessage.Publish(); DecrementApplicationBusyEventMessage.Publish("AddSongMultiLineTextEditViewModel.SaveAsync"); } }
public async Task NEW_EDIT_BEGINSAVE_GET() { MultiLineTextEdit newMultiLineTextEdit = null; MultiLineTextEdit savedMultiLineTextEdit = null; MultiLineTextEdit gottenMultiLineTextEdit = null; string mltTitle = "My Test MLT Title Here"; string lineAText = "MultiLineTextTests.neweditbeginsaveget.Test Line A Text. This is line A in English."; string lineBText = "MultiLineTextTests.neweditbeginsaveget.Test Line BBBB Text. This is line B in English."; //LineEdit lineA = null; //LineEdit lineB = null; bool gottenMultiLineTextLinesCountIsTwo = false; bool gottenMultiLineTextContainsLineA = false; bool gottenMultiLineTextContainsLineB = false; var isAsyncComplete = false; var hasError = false; EnqueueConditional(() => isAsyncComplete); await Setup(); try { //NEW UP THE MULTILINETEXT newMultiLineTextEdit = await MultiLineTextEdit.NewMultiLineTextEditAsync(); //EDIT //TITLE MLT newMultiLineTextEdit.Title = mltTitle; //CREATE LINES IN A LINELIST //1) CREATE LINE INFO DICTIONARY var lineInfoDictionary = new Dictionary <int, string>(); lineInfoDictionary.Add(0, lineAText); lineInfoDictionary.Add(1, lineBText); //2) LANGUAGE TEXT var linesLanguageText = SeedData.Ton.EnglishText; //3) CRITERIA var criteria = new Business.Criteria.LineInfosCriteria(linesLanguageText, lineInfoDictionary); //4) CREATE LINES var lineList = await LineList.NewLineListAsync(criteria); //5) ASSIGN LINES newMultiLineTextEdit.Lines = lineList; savedMultiLineTextEdit = await newMultiLineTextEdit.SaveAsync(); //GET (CONFIRM SAVE) gottenMultiLineTextEdit = await MultiLineTextEdit.GetMultiLineTextEditAsync(savedMultiLineTextEdit.Id); gottenMultiLineTextLinesCountIsTwo = (gottenMultiLineTextEdit.Lines.Count == 2); gottenMultiLineTextContainsLineA = (from line in gottenMultiLineTextEdit.Lines where line.LineNumber == 0 select line).First().Phrase.Text == lineAText; gottenMultiLineTextContainsLineB = (from line in gottenMultiLineTextEdit.Lines where line.LineNumber == 1 select line).First().Phrase.Text == lineBText; } catch { hasError = true; } finally { EnqueueCallback( () => Assert.IsFalse(hasError), () => Assert.IsTrue(gottenMultiLineTextLinesCountIsTwo), () => Assert.IsTrue(gottenMultiLineTextContainsLineA), () => Assert.IsTrue(gottenMultiLineTextContainsLineB), () => Assert.IsNotNull(newMultiLineTextEdit), () => Assert.IsNotNull(savedMultiLineTextEdit), () => Assert.IsNotNull(gottenMultiLineTextEdit), () => Assert.AreEqual(savedMultiLineTextEdit.Id, gottenMultiLineTextEdit.Id) ); EnqueueTestComplete(); Teardown(); isAsyncComplete = true; } }