Beispiel #1
0
        public void Setup()
        {
            var stubFetcher = StubNpuServerFetcher.Fetcher;

            facultiesProvider = new FacultiesProvider(stubFetcher);
            groupsHolder      = new GroupsHolder(stubFetcher, facultiesProvider);
            LecturersHolder       lecturersHolder       = new LecturersHolder(stubFetcher);
            ClassroomHolder       classroomHolder       = new ClassroomHolder(stubFetcher);
            CalendarRawItemHolder calendarRawItemHolder = new CalendarRawItemHolder(stubFetcher);
            SettingsHolder        settingsHolder        = new SettingsHolder(stubFetcher);
            OddDayWeekChecker     oddDayWeekChecker     = new OddDayWeekChecker(settingsHolder);


            var unprocessedExtendedLessonsManager = new UnprocessedExtendedLessonsManager(
                groupsHolder,
                lecturersHolder,
                classroomHolder,
                calendarRawItemHolder);

            _lessonProvider = new LessonProvider(unprocessedExtendedLessonsManager, oddDayWeekChecker);
        }
Beispiel #2
0
        public async Task MultipleSeveralFacultyLessonsRequests_FirstRun_ShouldFetchCalendarItemsOnlyOnce(int taskCount)
        {
            var getCalendarItemsCallCount = 0;
            var calendarRawItemHolderStub = new Mock <ICalendarRawItemHolder>();

            calendarRawItemHolderStub.Setup(g => g.GetCalendarItems())
            .Callback(() => ++ getCalendarItemsCallCount)
            .Returns(GetCalendarList);

            var manager = new UnprocessedExtendedLessonsManager(
                CreateIGroupsHolderStub(),
                CreateILecturersHolder(),
                CreateIClassroomsHolder(),
                calendarRawItemHolderStub.Object);

            var fetchTasks = new List <Task>();

            Parallel.For(0, taskCount / 3,
                         it =>
                         fetchTasks.Add(manager.GetFacultyUnprocessedLessons(new Faculty("asd", "asd"))));

            Parallel.For(0, taskCount / 3,
                         it =>
                         fetchTasks.Add(manager.GetFacultyUnprocessedLessons(new Faculty("dsa", "dsa"))));

            Parallel.For(0, taskCount / 3,
                         it =>
                         fetchTasks.Add(manager.GetFacultyUnprocessedLessons(new Faculty("123", "dsa"))));

            foreach (var task in fetchTasks)
            {
            }

            var   t = Task.WhenAll(fetchTasks.ToList());
            await t;

            Assert.AreEqual(3, getCalendarItemsCallCount);
            Assert.AreEqual(TaskStatus.RanToCompletion, t.Status);
        }
Beispiel #3
0
        public async Task MultipleSameFacultyLessonsRequest_FirstRun_ShouldFetchCalendarItemsOnlyOnce(int taskCount)
        {
            var random = new Random();
            var getCalendarItemsCallCount = 0;
            var calendarRawItemHolderStub = new Mock <ICalendarRawItemHolder>();

            calendarRawItemHolderStub.Setup(g => g.GetCalendarItems())
            .Callback(() => ++ getCalendarItemsCallCount)
            .Returns(GetCalendarList);

            var manager = new UnprocessedExtendedLessonsManager(
                CreateIGroupsHolderStub(),
                CreateILecturersHolder(),
                CreateIClassroomsHolder(),
                calendarRawItemHolderStub.Object);

            var fetchTasks = new List <Task>();

            Parallel.For(0, taskCount,
                         it =>
                         fetchTasks.Add(CallTaskWithRandomDelay()));

            foreach (var task in fetchTasks)
            {
            }
            var   t = Task.WhenAll(fetchTasks.ToList());
            await t;

            Assert.AreEqual(1, getCalendarItemsCallCount);
            Assert.AreEqual(TaskStatus.RanToCompletion, t.Status);

            Task CallTaskWithRandomDelay()
            {
                return(Task.Delay(100 * random.Next(0, 10)).ContinueWith(async _ => await manager.GetFacultyUnprocessedLessons(new Faculty("asd", "asd"))));
            }
        }