Exemplo n.º 1
0
    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;
      }
    }
Exemplo n.º 2
0
        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;
            }
        }