Beispiel #1
0
        public async void Get_Returns_OkObjectResult_With_StudioDto()
        {
            var dto = new StudioDto
            {
                Id          = Guid.NewGuid(),
                Name        = "Studio",
                FriendlyUrl = "FriendlyUrl",
                PostalCode  = "11111"
            };

            _studioService
            .Setup(s => s.GetAsync(It.IsAny <Guid>()))
            .Returns(Task.FromResult(dto));

            var result = await _studiosController.Get(dto.Id);

            Assert.IsType <OkObjectResult>(result);

            var okResult = result as OkObjectResult;

            Assert.IsType <StudioDto>(okResult.Value);

            var model = okResult.Value as StudioDto;

            Assert.Equal(dto.Id, model.Id);
            Assert.Equal(dto.Name, model.Name);
            Assert.Equal(dto.FriendlyUrl, model.FriendlyUrl);
            Assert.Equal(dto.PostalCode, model.PostalCode);
        }
Beispiel #2
0
        public async Task <IActionResult> PutStudio(int id, StudioDto studioDto)
        {
            if (id != studioDto.Id)
            {
                return(BadRequest());
            }

            try
            {
                var studio = _mapper.Map <Studio>(studioDto);
                await _repository.Update(studio);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!StudioExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }
            return(NoContent());
        }
 public Studio ToStudio(StudioDto studioDto)
 {
     return(new Studio()
     {
         Id = studioDto.Id,
         Name = studioDto.Name
     });
 }
Beispiel #4
0
        public async Task <IActionResult> Put([FromBody] StudioDto model)
        {
            ArgumentNotNullValidator.Validate(model, nameof(model));
            ValidateUserIsOwner(model.OwnerUserId);

            var studio = await _studioService.UpdateAsync(model);

            return(Ok(studio));
        }
Beispiel #5
0
        public async Task <ActionResult <StudioDto> > PostStudio(StudioDto studioDto)
        {
            var studio = _mapper.Map <Studio>(studioDto);

            studio = await _repository.Add(studio);

            var result = _mapper.Map <StudioDto>(studio);

            return(CreatedAtAction("GetStudio", new { id = result.Id }, result));
        }
Beispiel #6
0
        public async Task <IActionResult> Post([FromBody] StudioDto model)
        {
            ArgumentNotNullValidator.Validate(model, nameof(model));

            model.OwnerUserId = UserId.Value;
            var studio = await _studioService.CreateAsync(model);

            var studioUri = ApiHelper.GetResourceUri("studios", studio.Id);

            return(Created(studioUri, studio));
        }
Beispiel #7
0
        public async Task AddStudio(StudioDto dto)
        {
            var studioEntity = new Studio
            {
                Id           = dto.Id,
                CreationDate = DateTime.UtcNow,
                ModifiedDate = DateTime.UtcNow,
                Name         = dto.Name
            };

            await _studioRepository.AddAsync(studioEntity);
        }
Beispiel #8
0
        public static StudioDto MapStudio(Studio studio)
        {
            var studioDto = new StudioDto()
            {
                Id              = studio.Id,
                Name            = studio.Name,
                LastUpdatedDate = studio.LastUpdatedDate,
                CreatedDate     = studio.CreatedDate
            };

            return(studioDto);
        }
Beispiel #9
0
        /// <summary>
        /// Attaches the studios.
        /// </summary>
        /// <param name="dto">The dto.</param>
        /// <param name="item">The item.</param>
        /// <returns>Task.</returns>
        private async Task AttachStudios(BaseItemDto dto, BaseItem item)
        {
            var studios = item.Studios.ToList();

            dto.Studios = new StudioDto[studios.Count];

            var entities = await Task.WhenAll(studios.Distinct(StringComparer.OrdinalIgnoreCase).Select(c =>

                                                                                                        Task.Run(async() =>
            {
                try
                {
                    return(await _libraryManager.GetStudio(c).ConfigureAwait(false));
                }
                catch (IOException ex)
                {
                    _logger.ErrorException("Error getting studio {0}", ex, c);
                    return(null);
                }
            })

                                                                                                        )).ConfigureAwait(false);

            var dictionary = entities
                             .Where(i => i != null)
                             .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase);

            for (var i = 0; i < studios.Count; i++)
            {
                var studio = studios[i];

                var studioDto = new StudioDto
                {
                    Name = studio
                };

                Studio entity;

                if (dictionary.TryGetValue(studio, out entity))
                {
                    var primaryImagePath = entity.PrimaryImagePath;

                    if (!string.IsNullOrEmpty(primaryImagePath))
                    {
                        studioDto.PrimaryImageTag = GetImageCacheTag(entity, ImageType.Primary, primaryImagePath);
                    }
                }

                dto.Studios[i] = studioDto;
            }
        }
 public static void AddToCache(StudioDto dto)
 {
     lock (StudioCache)
     {
         if (!StudioCache.ContainsKey(dto.Name))
         {
             StudioCache[dto.Name] = new Studio
             {
                 Name             = dto.Name,
                 PrimaryImagePath = dto.HasPrimaryImage ? Kernel.ApiClient.GetImageUrl("Studios/" + dto.Name + "/Images/Primary", new ImageOptions {
                     Tag = dto.PrimaryImageTag
                 }, new QueryStringDictionary()) : null
             };
         }
     }
 }
Beispiel #11
0
        public async void CreateRoom_Returns_CreatedResult_With_RoomDto_And_Location()
        {
            var userId   = Guid.NewGuid();
            var studioId = Guid.NewGuid();

            var studio = new StudioDto
            {
                OwnerUserId = userId
            };

            var model = new RoomDto
            {
                Id   = Guid.NewGuid(),
                Name = "Studio"
            };

            _identity.Setup(i => i.IsAuthenticated).Returns(true);
            _identity.Setup(i => i.Name).Returns(userId.ToString());

            _studioService
            .Setup(s => s.GetAsync(It.IsAny <Guid>()))
            .Returns(Task.FromResult(studio));

            _studioService
            .Setup(s => s.CreateRoomAsync(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <RoomDto>()))
            .Returns(Task.FromResult(model));

            var result = await _studiosController.CreateRoom(studioId, model);

            Assert.IsType <CreatedResult>(result);

            var created = result as CreatedResult;

            Assert.IsType <RoomDto>(created.Value);

            var room = created.Value as RoomDto;

            Assert.Equal(model.Id, room.Id);
            Assert.Equal(model.Name, room.Name);

            var expectedLocation = ApiHelper.GetResourceUri("studios", studioId, "rooms", model.Id);

            Assert.Equal(expectedLocation, created.Location);
        }
Beispiel #12
0
        public async void Put_Returns_OkObjectResult_With_Updated_Model()
        {
            var model = new StudioDto
            {
                Id          = Guid.NewGuid(),
                Name        = "Studio",
                FriendlyUrl = "FriendlyUrl",
                PostalCode  = "11111",
                OwnerUserId = Guid.NewGuid()
            };

            var updatedModel = new StudioDto
            {
                Id          = model.Id,
                Name        = "Studio_Updated",
                FriendlyUrl = "FriendlyUrl_Updated",
                PostalCode  = "22222",
                OwnerUserId = model.OwnerUserId
            };

            _identity.Setup(i => i.IsAuthenticated).Returns(true);
            _identity.Setup(i => i.Name).Returns(model.OwnerUserId.ToString());

            _studioService
            .Setup(s => s.UpdateAsync(It.IsAny <StudioDto>()))
            .Returns(Task.FromResult(updatedModel));

            var result = await _studiosController.Put(model);

            Assert.IsType <OkObjectResult>(result);

            var ok = result as OkObjectResult;

            Assert.IsType <StudioDto>(ok.Value);

            var studio = ok.Value as StudioDto;

            Assert.Equal(updatedModel.Id, studio.Id);
            Assert.Equal(updatedModel.Name, studio.Name);
            Assert.Equal(updatedModel.FriendlyUrl, studio.FriendlyUrl);
            Assert.Equal(updatedModel.PostalCode, studio.PostalCode);
            Assert.Equal(updatedModel.OwnerUserId, studio.OwnerUserId);
        }
Beispiel #13
0
        /// <summary>
        /// Attaches the studios.
        /// </summary>
        /// <param name="dto">The dto.</param>
        /// <param name="item">The item.</param>
        /// <returns>Task.</returns>
        private void AttachStudios(BaseItemDto dto, BaseItem item)
        {
            var studios = item.Studios.ToList();

            dto.Studios = new StudioDto[studios.Count];

            var dictionary = studios.Distinct(StringComparer.OrdinalIgnoreCase).Select(name =>
            {
                try
                {
                    return(_libraryManager.GetStudio(name));
                }
                catch (IOException ex)
                {
                    _logger.ErrorException("Error getting studio {0}", ex, name);
                    return(null);
                }
            })
                             .Where(i => i != null)
                             .ToDictionary(i => i.Name, StringComparer.OrdinalIgnoreCase);

            for (var i = 0; i < studios.Count; i++)
            {
                var studio = studios[i];

                var studioDto = new StudioDto
                {
                    Name = studio
                };

                Studio entity;

                if (dictionary.TryGetValue(studio, out entity))
                {
                    studioDto.Id = entity.Id.ToString("N");
                    studioDto.PrimaryImageTag = GetImageCacheTag(entity, ImageType.Primary);
                }

                dto.Studios[i] = studioDto;
            }
        }
Beispiel #14
0
        public async void Post_Returns_CreatedResult_With_StudioDto_And_Location()
        {
            var model = new StudioDto
            {
                Id          = Guid.NewGuid(),
                Name        = "Studio",
                FriendlyUrl = "FriendlyUrl",
                PostalCode  = "11111",
                OwnerUserId = Guid.NewGuid()
            };

            _identity.Setup(i => i.IsAuthenticated).Returns(true);
            _identity.Setup(i => i.Name).Returns(model.OwnerUserId.ToString());

            _studioService
            .Setup(s => s.CreateAsync(It.IsAny <StudioDto>()))
            .Returns(Task.FromResult(model));

            var result = await _studiosController.Post(model);

            Assert.IsType <CreatedResult>(result);

            var created = result as CreatedResult;

            Assert.IsType <StudioDto>(created.Value);

            var studio = created.Value as StudioDto;

            Assert.Equal(model.Id, studio.Id);
            Assert.Equal(model.Name, studio.Name);
            Assert.Equal(model.FriendlyUrl, studio.FriendlyUrl);
            Assert.Equal(model.PostalCode, studio.PostalCode);
            Assert.Equal(model.OwnerUserId, studio.OwnerUserId);

            var expectedLocation = ApiHelper.GetResourceUri("studios", model.Id);

            Assert.Equal(expectedLocation, created.Location);
        }
Beispiel #15
0
        public async void CreateAsync_Returns_New_StudioDto()
        {
            var name        = "StudioName";
            var friendlyUrl = "FriendlyUrl";
            var postalCode  = "12345";
            var ownerUserId = Guid.NewGuid();
            var model       = Studio.Create(name, friendlyUrl, postalCode, ownerUserId, _studioValidator.Object);

            _studioRepository
            .Setup(r => r.CreateAsync(It.IsAny <Studio>()))
            .Returns(Task.FromResult(model));

            var dto = new StudioDto {
                Name = name, FriendlyUrl = friendlyUrl, PostalCode = postalCode, OwnerUserId = ownerUserId
            };
            var result = await _studioService.CreateAsync(dto);

            Assert.NotNull(result);
            Assert.Equal(name, result.Name);
            Assert.Equal(friendlyUrl, result.FriendlyUrl);
            Assert.Equal(ownerUserId, result.OwnerUserId);
            Assert.Equal(postalCode, result.PostalCode);
        }
Beispiel #16
0
        public async void CreateSession_Throws_UnauthorizedAccessException(string userId)
        {
            var studio = new StudioDto
            {
                OwnerUserId = Guid.NewGuid()
            };

            var room = new RoomDto
            {
                StudioId = studio.Id
            };

            var session = new SessionDto
            {
                Id = Guid.NewGuid()
            };

            _studioService
            .Setup(s => s.GetAsync(It.IsAny <Guid>()))
            .Returns(Task.FromResult(studio));

            _roomService
            .Setup(r => r.GetAsync(It.IsAny <Guid>()))
            .Returns(Task.FromResult(room));

            var isAuthenticated = userId != null;

            _identity.Setup(i => i.IsAuthenticated).Returns(isAuthenticated);
            _identity.Setup(i => i.Name).Returns(userId);

            var ex = await Assert.ThrowsAsync <UnauthorizedAccessException>(
                () =>
                _roomsController.CreateSession(room.Id, session));

            Assert.NotNull(ex);
        }
Beispiel #17
0
        public async Task <IActionResult> Add([FromBody] StudioDto dto)
        {
            await _studioService.AddStudio(dto);

            return(Ok(true));
        }
Beispiel #18
0
        public async void StartSession_And_EndSession_Return_SessionDto_With_ActualStartTime_ActualEndTime(bool startSession)
        {
            var userId      = Guid.NewGuid();
            var roomId      = Guid.NewGuid();
            var start       = DateTime.Now;
            var end         = start.AddHours(2);
            var actualStart = DateTime.Now;
            var actualEnd   = actualStart.AddHours(2);

            var studio = new StudioDto
            {
                Id          = Guid.NewGuid(),
                OwnerUserId = userId
            };

            var room = new RoomDto
            {
                Id       = roomId,
                StudioId = studio.Id
            };

            var dto = new SessionDto
            {
                Id       = Guid.NewGuid(),
                RoomId   = roomId,
                Schedule = new DateRangeDto
                {
                    Start = start,
                    End   = end
                },
                ActualStartTime = startSession ? actualStart : (DateTime?)null,
                ActualEndTime   = !startSession ? actualEnd : (DateTime?)null
            };

            _identity.Setup(i => i.IsAuthenticated).Returns(true);
            _identity.Setup(i => i.Name).Returns(userId.ToString());

            _studioService
            .Setup(s => s.GetAsync(It.IsAny <Guid>()))
            .Returns(Task.FromResult(studio));

            _roomService
            .Setup(s => s.GetAsync(It.IsAny <Guid>()))
            .Returns(Task.FromResult(room));

            _roomService
            .Setup(s => s.StartSessionAsync(It.IsAny <Guid>(), It.IsAny <Guid>()))
            .Returns(Task.FromResult(dto));

            _roomService
            .Setup(s => s.EndSessionAsync(It.IsAny <Guid>(), It.IsAny <Guid>()))
            .Returns(Task.FromResult(dto));

            var result =
                startSession
                ? await _roomsController.StartSession(roomId, dto.Id)
                : await _roomsController.EndSession(roomId, dto.Id);

            Assert.IsType <OkObjectResult>(result);

            var okResult = result as OkObjectResult;

            Assert.IsType <SessionDto>(okResult.Value);

            var session = okResult.Value as SessionDto;

            if (startSession)
            {
                Assert.NotNull(session.ActualStartTime);
                Assert.Equal(dto.ActualStartTime, session.ActualStartTime);
            }
            else
            {
                Assert.NotNull(session.ActualEndTime);
                Assert.Equal(dto.ActualEndTime, session.ActualEndTime);
            }
        }
Beispiel #19
0
        public async void CreateSession_Returns_CreatedResult_With_SessionDto_And_Location()
        {
            var userId = Guid.NewGuid();
            var roomId = Guid.NewGuid();
            var start  = new DateTime(2018, 1, 1, 10, 0, 0, DateTimeKind.Unspecified);
            var end    = start.AddHours(2);

            var studio = new StudioDto
            {
                Id          = Guid.NewGuid(),
                OwnerUserId = userId
            };

            var room = new RoomDto
            {
                Id       = roomId,
                StudioId = studio.Id
            };

            var dto = new SessionDto
            {
                RoomId   = roomId,
                Schedule = new DateRangeDto
                {
                    Start = start,
                    End   = end
                }
            };

            _identity.Setup(i => i.IsAuthenticated).Returns(true);
            _identity.Setup(i => i.Name).Returns(userId.ToString());
            _identity.Setup(i => i.Claims).Returns(new List <Claim>
            {
                new Claim(ClaimTypes.Name, userId.ToString()),
                new Claim(ApiClaimTypes.TimeZoneId, "1"),
                new Claim(ApiClaimTypes.TimeZoneName, "Central Standard Time"),
                new Claim(ApiClaimTypes.TimeZoneUtcOffset, "-6")
            });

            _studioService
            .Setup(s => s.GetAsync(It.IsAny <Guid>()))
            .Returns(Task.FromResult(studio));

            _roomService
            .Setup(s => s.GetAsync(It.IsAny <Guid>()))
            .Returns(Task.FromResult(room));

            _roomService
            .Setup(s => s.CreateSessionAsync(It.IsAny <Guid>(), It.IsAny <SessionDto>()))
            .Returns(Task.FromResult(dto));

            var result = await _roomsController.CreateSession(room.Id, dto);

            Assert.IsType <CreatedResult>(result);

            var created = result as CreatedResult;

            Assert.IsType <SessionDto>(created.Value);

            var model = created.Value as SessionDto;

            Assert.Equal(dto.RoomId, model.RoomId);
            Assert.NotNull(model.Schedule);
            Assert.Equal(dto.Schedule.Start, model.Schedule.Start);
            Assert.Equal(dto.Schedule.End, model.Schedule.End);

            var createdLocation  = created.Location;
            var expectedLocation = ApiHelper.GetResourceUri("rooms", roomId, "sessions", model.Id);

            Assert.Equal(expectedLocation, createdLocation);
        }