Ejemplo n.º 1
0
        private async Task <PlanDTO> CreateMonitoringPlan(Guid authTokenId)
        {
            PlanDTO plan = null;

            try
            {
                plan = await _plansHelper.CreateNewPlan();

                var activityTemplate = await ExtractActivityTemplate();

                var activity = await AddActivityToPlan(authTokenId, plan, activityTemplate);
                await ConfigureMonitorActivity(activity);

                return(plan);
            }
            catch
            {
                if (plan != null)
                {
                    await HttpDeleteAsync(GetHubApiBaseUrl() + "/plans?id=" + plan.Id.ToString());
                }

                throw;
            }
        }
        public async Task GoogleIntoGoogleEndToEnd()
        {
            var googleAuthTokenId      = await new Fr8.Testing.Integration.Tools.Terminals.IntegrationTestTools_terminalGoogle(this).ExtractGoogleDefaultToken();
            var defaultGoogleAuthToken = GetGoogleAuthToken(googleAuthTokenId);

            //create a new plan
            var googleSheetApi             = new GoogleSheet(new GoogleIntegration(ObjectFactory.GetInstance <IRestfulServiceClient>()), new GoogleDrive());
            var sourceSpreadsheetUri       = string.Empty;
            var destinationSpreadsheetUri  = string.Empty;
            var sourceSpreadsheetName      = Guid.NewGuid().ToString();
            var destinationSpreadsheetName = Guid.NewGuid().ToString();

            try
            {
                //Save test data into test spreadsheet
                sourceSpreadsheetUri = await googleSheetApi.CreateSpreadsheet(sourceSpreadsheetName, defaultGoogleAuthToken);

                var sourceWorksheetUri = (await googleSheetApi.GetWorksheets(sourceSpreadsheetUri, defaultGoogleAuthToken)).Select(x => x.Key).First();
                await googleSheetApi.WriteData(sourceSpreadsheetUri, sourceWorksheetUri, GetTestSpreadsheetContent(), defaultGoogleAuthToken);

                var thePlan = await _plansHelper.CreateNewPlan();

                //Configure Get_Google_Sheet_Data activity to read data from this test spreadsheet
                await _googleActivityConfigurator.AddAndConfigureGetFromGoogleSheet(thePlan, 1, sourceSpreadsheetName, true);

                //Configure Build_Message activity to build message based on the data from this spreadsheet
                await _fr8ActivityConfigurator.AddAndConfigureBuildMessage(thePlan, 2, "message", "Email - [email], subject - [subject], body - [body]");

                //Configure Save_To_Google activity to save this message into new test spreadsheet
                destinationSpreadsheetUri = await googleSheetApi.CreateSpreadsheet(destinationSpreadsheetName, defaultGoogleAuthToken);

                await _googleActivityConfigurator.AddAndConfigureSaveToGoogleSheet(thePlan, 3, "Standard Payload Data", Build_Message_v1.RuntimeCrateLabel, destinationSpreadsheetName);

                //run the plan
                await _plansHelper.RunPlan(thePlan.Id);

                var googleSheets = await googleSheetApi.GetSpreadsheets(defaultGoogleAuthToken);

                Assert.IsNotNull(googleSheets.FirstOrDefault(x => x.Value == destinationSpreadsheetName), "New created spreadsheet was not found into existing google files.");
                var spreadSheeturl = googleSheets.FirstOrDefault(x => x.Value == destinationSpreadsheetName).Key;

                //Checking that new test spreadsheet contains the same message that was generated
                var worksheets = await googleSheetApi.GetWorksheets(spreadSheeturl, defaultGoogleAuthToken);

                Assert.IsNotNull(worksheets.FirstOrDefault(x => x.Value == "Sheet1"), "Worksheet was not found into newly created google excel file.");
                var worksheetUri = worksheets.FirstOrDefault(x => x.Value == "Sheet1").Key;
                var dataRows     = (await googleSheetApi.GetData(spreadSheeturl, worksheetUri, defaultGoogleAuthToken)).ToArray();

                Assert.AreEqual(1, dataRows.Length, "Only one data row is expected to be in crated spreadsheet");
                var storedData = dataRows[0].Row[0].Cell;
                Assert.AreEqual("message", storedData.Key, "Saved message header doesn't match the expected data");
                Assert.AreEqual("Email - [email protected], subject - Fake Subject, body - Fake Body", storedData.Value, "Saved message body doesn't match the expected data");
            }
            finally
            {
                if (!string.IsNullOrEmpty(sourceSpreadsheetUri))
                {
                    await googleSheetApi.DeleteSpreadSheet(sourceSpreadsheetUri, defaultGoogleAuthToken);
                }
                if (!string.IsNullOrEmpty(destinationSpreadsheetUri))
                {
                    await googleSheetApi.DeleteSpreadSheet(destinationSpreadsheetUri, defaultGoogleAuthToken);
                }
            }
        }
        public async Task Monitor_Gmail_Inbox_Test()
        {
            Fr8AccountDO         currentUser = null;
            AuthorizationTokenDO token       = null;

            //we use a separate google account for this test.
            GetDifferentGoogleAuthToken(out currentUser, out token);

            var testPlan = await _plansHelper.CreateNewPlan(PlanName);

            await AddAndAuthorizeMonitorGmailInboxActivity(token, testPlan);

            //add saveToFr8Warehouse activity
            var saveToFr8WarehouseActivity = await _fr8ActivityConfigurator.AddAndConfigureSaveToFr8Warehouse(testPlan, 2);

            SetCratesForSaving(saveToFr8WarehouseActivity);
            saveToFr8WarehouseActivity = await HttpPostAsync <ActivityDTO, ActivityDTO>(GetHubApiBaseUrl() + "activities/configure", saveToFr8WarehouseActivity);

            //run the plan
            await _plansHelper.RunPlan(testPlan.Id);

            await Task.Delay(10000);

            //sending an email
            SendAnEmailToMonitoredAccountViaGoogle();

            //testing
            var stopwatch = Stopwatch.StartNew();

            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                var mtDataCountBefore = uow.MultiTenantObjectRepository
                                        .AsQueryable <StandardPayloadDataCM>(currentUser.Id.ToString())
                                        .Count();
                int mtDataCountAfter = mtDataCountBefore;
                while (stopwatch.ElapsedMilliseconds <= MaxAwaitPeriod)
                {
                    await Task.Delay(SingleAwaitPeriod);

                    mtDataCountAfter = uow.MultiTenantObjectRepository
                                       .AsQueryable <StandardEmailMessageCM>(currentUser.Id.ToString()).Count();

                    if (mtDataCountBefore < mtDataCountAfter)
                    {
                        break;
                    }
                }
                Assert.IsTrue(mtDataCountBefore < mtDataCountAfter,
                              $"The number of MtData: ({mtDataCountAfter}) records for user {currentUser.UserName} remained unchanged within {MaxAwaitPeriod} miliseconds.");
            }

            //left here in case the test is ran locally, so the plans don't stack
            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                var plans = uow.PlanRepository.GetPlanQueryUncached().Where(a => a.Name == PlanName && a.Fr8AccountId == currentUser.Id).ToList();
                foreach (var plan in plans)
                {
                    await HttpDeleteAsync(GetHubApiBaseUrl() + $"/plans?id={plan.Id}");
                }
            }

            //cleaning hangfire job
            string connString = (string)ObjectFactory.GetInstance <ISqlConnectionProvider>().ConnectionInfo;

            JobStorage.Current = new Hangfire.SqlServer.SqlServerStorage(connString);
            string terminalSecret = "";

            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                terminalSecret = uow.TerminalRepository.GetQuery().Where(a => a.Name == "terminalGoogle").FirstOrDefault().Secret;
            }
            string jobId = terminalSecret + "|" + token.ExternalAccountId;

            RecurringJob.RemoveIfExists(jobId);
        }