예제 #1
0
        public async Task <ResponseMeta> UpdateAsync(CourseDto dto)
        {
            using (var context = await _contextFactory)
            {
                if (dto.Id == null)
                {
                    return(ResponseMeta.CreateFailure(ResponseFailureType.IdRequired));
                }

                var existing = await context.Courses.FirstOrDefaultAsync(m => m.Id == dto.Id);

                if (existing == null)
                {
                    return(ResponseMeta.CreateFailure(ResponseFailureType.EntityNotFound));
                }

                var model = dto.ToModel();

                try
                {
                    context.Entry(existing).CurrentValues.SetValues(model);
                    await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    return(ResponseMeta.CreateFailure(ex.ToString()));
                }

                return(ResponseMeta.CreateSuccess());
            }
        }
예제 #2
0
        public async Task SearchAsync_ReturnsMatches()
        {
            var list = new List <CourseDto>
            {
                new CourseDto {
                    Name = "Response1"
                },
                new CourseDto {
                    Name = "Other Response"
                }
            };

            SetupTextFixture(s =>
            {
                var mock = new Mock <ICourseService>();
                mock.Setup(m => m.SearchAsync("David")).ReturnsAsync(ResponseMeta <List <CourseDto> > .CreateSuccess(list));

                s.AddTransient <ICourseService>(_ => mock.Object);
            });

            var api      = new CourseApi();
            var response = await api.SearchAsync("David");

            Assert.IsTrue(response.Success);
            response.Item.Should().BeEquivalentTo(list);
        }
예제 #3
0
        public async Task <ResponseMeta> AddAsync(CourseDto dto)
        {
            if (dto.Id != null)
            {
                return(ResponseMeta <CourseDto> .CreateFailure(ResponseFailureType.IdRequiredNull));
            }

            using (var context = await _contextFactory)
            {
                var model = dto.ToModel();

                try
                {
                    await context.Courses.AddAsync(model);

                    await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    return(ResponseMeta <CourseDto> .CreateFailure(ex.ToString()));
                }

                return(ResponseMeta.CreateSuccess());
            }
        }
예제 #4
0
        public async Task <ResponseMeta <SettingsDto> > GetSettings()
        {
            using (var context = await _contextFactory)
            {
                var list = context.Settings.ToList();

                var settings = new SettingsDto();
                settings.CourseImageUrl = list.FirstOrDefault(s => s.Key == "CourseImageUrl")?.Value;

                return(ResponseMeta <SettingsDto> .CreateSuccess(settings));
            }
        }
예제 #5
0
        public async Task <ResponseMeta <CourseDto> > GetAsync(long id)
        {
            using (var context = await _contextFactory)
            {
                var model = await context.Courses.FirstOrDefaultAsync(m => m.Id == id);

                if (model == null)
                {
                    return(ResponseMeta <CourseDto> .CreateFailure(ResponseFailureType.EntityNotFound));
                }

                return(ResponseMeta <CourseDto> .CreateSuccess(model.ToDto()));
            }
        }
예제 #6
0
        public async Task AddAsync_ReturnsSuccess()
        {
            SetupTextFixture(s =>
            {
                var mock = new Mock <ICourseService>();
                mock.Setup(m => m.AddAsync(It.IsAny <CourseDto>())).ReturnsAsync(ResponseMeta.CreateSuccess());

                s.AddTransient <ICourseService>(_ => mock.Object);
            });

            var api      = new CourseApi();
            var response = await api.AddAsync(Dtos.CourseDto);

            Assert.IsTrue(response.Success);
        }
예제 #7
0
        public async Task <ResponseMeta <List <CourseDto> > > SearchAsync(string search)
        {
            using (var context = await _contextFactory)
            {
                var items = context.Courses.ToList();
                var recs  = context.Courses
                            .Where(c => c.Name.Contains(search))
                            .Take(25)
                            .ToList()
                            .Select(c => c.ToDto())
                            .ToList();

                return(ResponseMeta <List <CourseDto> > .CreateSuccess(recs));
            }
        }
예제 #8
0
        public async Task GetSettings_ReturnsSettings()
        {
            SetupTextFixture(s =>
            {
                var mock = new Mock <ISettingsService>();
                mock.Setup(m => m.GetSettings()).ReturnsAsync(ResponseMeta <SettingsDto> .CreateSuccess(Dtos.SettingsDto));

                s.AddTransient <ISettingsService>(_ => mock.Object);
            });

            var api      = new SettingsApi();
            var response = await api.GetSettings();

            Assert.IsTrue(response.Success);
            response.Item.Should().BeEquivalentTo(Dtos.SettingsDto);
        }
예제 #9
0
        public async Task GetCourseInfoForCourse_ReturnsCourseInfo()
        {
            SetupTextFixture(s =>
            {
                var mock = new Mock <ICourseInfoService>();
                mock.Setup(m => m.GetCourseInfoForCourse(1)).ReturnsAsync(ResponseMeta <CourseInfoDto> .CreateSuccess(Dtos.CourseInfoDto));

                s.AddTransient <ICourseInfoService>(_ => mock.Object);
            });

            var api      = new CourseInfoApi();
            var response = await api.GetCourseInfoForCourse(1);

            Assert.IsTrue(response.Success);
            response.Item.Should().BeEquivalentTo(Dtos.CourseInfoDto);
        }
예제 #10
0
        public async Task GetHolesForCourse_ReturnsCourse()
        {
            SetupTextFixture(s =>
            {
                var mock = new Mock <IHoleService>();
                mock.Setup(m => m.GetHolesForCourse(1)).ReturnsAsync(ResponseMeta <List <HoleDto> > .CreateSuccess(Dtos.HoleDtoList));

                s.AddTransient <IHoleService>(_ => mock.Object);
            });

            var api      = new HoleApi();
            var response = await api.GetHolesForCourse(1);

            Assert.IsTrue(response.Success);
            response.Item.Should().BeEquivalentTo(Dtos.HoleDtoList);
        }
예제 #11
0
        public async Task <ResponseMeta> DeleteAsync(long id)
        {
            using (var context = await _contextFactory)
            {
                var model = await context.Courses.FirstOrDefaultAsync(m => m.Id == id);

                if (model == null)
                {
                    return(ResponseMeta.CreateFailure(ResponseFailureType.EntityNotFound));
                }

                context.Courses.Remove(model);
                await context.SaveChangesAsync();

                return(ResponseMeta.CreateSuccess());
            }
        }
예제 #12
0
        public async Task <ResponseMeta <List <HoleDto> > > GetHolesForCourse(long courseId)
        {
            using (var context = await _contextFactory)
            {
                var course = await context.Courses
                             .Include(c => c.Holes)
                             .FirstOrDefaultAsync(c => c.Id == courseId);

                if (course == null)
                {
                    return(ResponseMeta <List <HoleDto> > .CreateFailure(ResponseFailureType.EntityNotFound));
                }

                var holes = course.Holes
                            .Select(h => h.ToDto())
                            .ToList();

                return(ResponseMeta <List <HoleDto> > .CreateSuccess(holes));
            }
        }
예제 #13
0
        public static async Task <ResponseMeta> GetResponseAsync(this HttpResponseMessage response)
        {
            if (response.IsSuccessStatusCode)
            {
                return(ResponseMeta.CreateSuccess());
            }
            else if (response.StatusCode == HttpStatusCode.BadRequest)
            {
                dynamic dyn = JObject.Parse(await response.Content.ReadAsStringAsync());

                return(ResponseMeta.CreateFailure
                       (
                           (ResponseFailureType)dyn.FailureType,
                           dyn.Errors.ToObject <string[]>()
                       ));
            }
            else
            {
                throw new Exception($"Fatal error on request, response status: {response.StatusCode}");
            }
        }