Example #1
0
        public async Task AddMeeting()
        {
            // Add a single meeting, and get back that meeting.
            var c = new MRUDatabaseAccess();
            var m = GenerateSimpleMeeting(DateTime.Now);
            await c.MarkVisitedNow(m);

            Assert.AreEqual(1, await c.ExecuteScalarAsync <int>("select count(*) from MRU"));
        }
Example #2
0
        public async Task AddMeetingTwice()
        {
            // When we update the MRU, it shouldn't create a new entry! :-)
            var c = new MRUDatabaseAccess();
            var m = GenerateSimpleMeeting(DateTime.Now);
            await c.MarkVisitedNow(m);

            await c.MarkVisitedNow(m);

            Assert.AreEqual(1, await c.ExecuteScalarAsync <int>("select count(*) from MRU"));
        }
Example #3
0
        public async Task Add2Meetings()
        {
            // Add two of them.
            var c  = new MRUDatabaseAccess();
            var m1 = GenerateSimpleMeeting(DateTime.Now, "meeting 1", 100);
            var m2 = GenerateSimpleMeeting(DateTime.Now, "meeting 2", 101);
            await c.MarkVisitedNow(m1);

            await c.MarkVisitedNow(m2);

            Assert.AreEqual(2, await c.ExecuteScalarAsync <int>("select count(*) from MRU"));
        }
Example #4
0
        public async Task MakeSureEmpty()
        {
            // Test that what we use to make sure we have an empty database does, indeed, render an empty database.

            // Add a single meeting, and get back that meeting.
            var c = new MRUDatabaseAccess();
            var m = GenerateSimpleMeeting(DateTime.Now);
            await c.MarkVisitedNow(m);

            await DBTestHelpers.DeleteDB();

            Assert.AreEqual(0, await c.ExecuteScalarAsync <int>("select count(*) from MRU"));
        }
Example #5
0
        public async Task Add2MeetingsRepeatFirst()
        {
            // Add two of them, then re-mark the first. Shouldn't change anything!
            var c  = new MRUDatabaseAccess();
            var m1 = GenerateSimpleMeeting(DateTime.Now, "meeting 1", 100);
            var m2 = GenerateSimpleMeeting(DateTime.Now, "meeting 2", 101);
            await c.MarkVisitedNow(m1);

            await c.MarkVisitedNow(m2);

            await c.MarkVisitedNow(m1);

            Assert.AreEqual(2, await c.ExecuteScalarAsync <int>("select count(*) from MRU"));
        }
Example #6
0
        /// <summary>
        /// Load our db with a few items
        /// </summary>
        /// <param name="nMeetings"></param>
        private async Task LoadDB(int nMeetings, int indexStart = 0, TimeSpan futureTime = new TimeSpan())
        {
            var mlst = GenerateMeetings(indexStart)
                       .Take(nMeetings);

            var db = new MRUDatabaseAccess();

            var timestamp = DateTime.Now + futureTime;

            foreach (var m in mlst)
            {
                await db.MarkVisitedNow(m, timestamp);
            }
        }
Example #7
0
        public async Task AddMeetingCausesRxFire()
        {
            // Add a single meeting, and get back that meeting.
            var c = new MRUDatabaseAccess();

            int fireCount = 0;

            MRUDatabaseAccess.MRUDBUpdated
            .Subscribe(_ => fireCount++);

            var m = GenerateSimpleMeeting(DateTime.Now);
            await c.MarkVisitedNow(m);

            await TestUtils.SpinWait(() => fireCount == 1, 1000);
        }
Example #8
0
        public async Task UpdateMeetingTitle()
        {
            // When we update the MRU, it shouldn't create a new entry! :-)
            var c = new MRUDatabaseAccess();
            var m = GenerateSimpleMeeting(DateTime.Now);
            await c.MarkVisitedNow(m);

            (m as dummyMeeting).Title = "new title";
            await c.MarkVisitedNow(m);

            var allMeetings = await(await c.QueryMRUDB()).ToListAsync();

            Assert.AreEqual(1, allMeetings.Count);
            Assert.AreEqual("new title", allMeetings[0].Title);
        }
Example #9
0
        public async Task GetBackValidAgenda()
        {
            // After adding a meeting, we should get back an expected agneda info object.

            var c = new MRUDatabaseAccess();
            var m = GenerateSimpleMeeting(DateTime.Now);
            await c.MarkVisitedNow(m);

            var mru = await(await c.QueryMRUDB()).FirstOrDefaultAsync();

            Assert.IsNotNull(m);

            var ai = mru.ToAgendaInfo();

            Assert.AreEqual("indico.cern.ch/^//^/100", ai.AsReferenceString());
        }
Example #10
0
        public async Task GetBackMultipleMeetingsSorted()
        {
            var c = new MRUDatabaseAccess();

            foreach (var db in Enumerable.Range(0, 10).Select(i => GenerateSimpleMeeting(new DateTime(2000, 12, i + 1), string.Format("meeting {0}", i), 100 + i)))
            {
                Debug.WriteLine("Inserting meeting {0}", db.Title);
                await c.MarkVisitedNow(db);
            }

            var allMeetings = await c.QueryMRUDB();

            var firstM = await allMeetings.OrderBy(m => m.StartTime).FirstOrDefaultAsync();

            var lastM = await allMeetings.OrderByDescending(m => m.StartTime).FirstOrDefaultAsync();

            Assert.AreEqual("meeting 0", firstM.Title);
            Assert.AreEqual("meeting 9", lastM.Title);
        }
Example #11
0
        public void CTor()
        {
            var c = new MRUDatabaseAccess();

            Assert.IsNotNull(c);
        }
Example #12
0
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            this.InitializeComponent();

            // Register everything so the ReactiveUI view model finder can do the wiring it needs to do.

            Locator.CurrentMutable.Register(() => new StartPage(), typeof(IViewFor <StartPageViewModel>));
            Locator.CurrentMutable.Register(() => new FirstRunView(), typeof(IViewFor <FirstRunViewModel>));
            Locator.CurrentMutable.Register(() => new MeetingPage(), typeof(IViewFor <MeetingPageViewModel>));
            Locator.CurrentMutable.Register(() => new CategoryPageView(), typeof(IViewFor <CategoryPageViewModel>));
            Locator.CurrentMutable.Register(() => new TalkView(), typeof(IViewFor <TalkUserControlViewModel>));
            Locator.CurrentMutable.Register(() => new CategoryAllPageView(), typeof(IViewFor <CategoryAllPageViewModel>));
            Locator.CurrentMutable.Register(() => new CategoryInfoSimpleView(), typeof(IViewFor <CategoryConfigInfo>));
            Locator.CurrentMutable.Register(() => new IndicoApiKeyView(), typeof(IViewFor <IndicoApiKey>));
            Locator.CurrentMutable.Register(() => new SessionUserControl(), typeof(IViewFor <SessionUserControlViewModel>));
            Locator.CurrentMutable.Register(() => new TalkFileCollectionUserControl(), typeof(IViewFor <TalkFileCollectionUserControlViewModel>));
            Locator.CurrentMutable.Register(() => new FileView(), typeof(IViewFor <FileUserControlViewModel>));
#if WINDOWS_APP
            Locator.CurrentMutable.Register(() => new SlideThumbUserControl(), typeof(IViewFor <SlideThumbViewModel>));
            Locator.CurrentMutable.Register(() => new PDFPageUserControl(), typeof(IViewFor <PDFPageViewModel>));
            Locator.CurrentMutable.Register(() => new FullTalkAsStripView(), typeof(IViewFor <FullTalkAsStripViewModel>));
            Locator.CurrentMutable.Register(() => new SecuritySettingsPage(), typeof(IViewFor <BasicSettingsViewModel>));
#endif
#if WINDOWS_PHONE_APP
            Locator.CurrentMutable.Register(() => new BasicSettingsView(), typeof(IViewFor <BasicSettingsViewModel>));
            Locator.CurrentMutable.Register(() => new LoadMeetingView(), typeof(IViewFor <OpenURLControlViewModel>));
#endif

            // Create the main view model, and register that.
            var r = new RoutingState();
            Locator.CurrentMutable.RegisterConstant(r, typeof(RoutingState));
            Locator.CurrentMutable.RegisterConstant(new MainPageViewModel(r), typeof(IScreen));

            // A tool to convert URL's to meeting list refs
            Locator.CurrentMutable.Register(() => new MeetingListGenerator(), typeof(IMeetingListRefFactory));

            // Setup suspend and resume. Note we need to do this once
            // we have routine info.
            this.Suspending += this.OnSuspending;

            autoSuspendHelper = new IWalker.Util.AutoSuspendHelper(this);
            RxApp.SuspensionHost.CreateNewAppState = () => new MainPageViewModel(r);
            RxApp.SuspensionHost.SetupDefaultSuspendResume();
            Locator.CurrentMutable.RegisterConstant(autoSuspendHelper, typeof(IWalker.Util.AutoSuspendHelper));

            // The Most Recently Used (MUR) database
            var mruDB = new MRUDatabaseAccess();
            Locator.CurrentMutable.RegisterConstant(mruDB, typeof(IMRUDatabase));

            // Make sure the JSON serializer for our cache can deal with interface objects:
            Locator.CurrentMutable.Register(() => new JsonSerializerSettings()
            {
                ObjectCreationHandling = ObjectCreationHandling.Replace,
                ReferenceLoopHandling  = ReferenceLoopHandling.Ignore,
                TypeNameHandling       = TypeNameHandling.All,
            }, typeof(JsonSerializerSettings), null);

#if WINDOWS_PHONE_APP
            // And the back button on windows phone.
            Windows.Phone.UI.Input.HardwareButtons.BackPressed += (o, args) =>
            {
                if (r.NavigateBack.CanExecute(null))
                {
                    r.NavigateBack.Execute(null);
                    args.Handled = true;
                }
            };
#endif
            // Setup the internal data cache
            BlobCache.ApplicationName = "IndicoWalker";
            Blobs.Register();

            // Get all background tasks setup.
            IWalker.Util.BackgroundTasks.Register();
        }