Ejemplo n.º 1
0
        public EditSuperheroPage(SuperheroDetailsDTO superhero)
        {
            InitializeComponent();

            _superhero = superhero;

            BindingContext = _viewModel = App.Container.GetRequiredService <SuperheroUpdateViewModel>();
        }
Ejemplo n.º 2
0
        public void EditCommand_calls_EditAsync_with_DTO()
        {
            var navigation = new Mock <INavigationService>();
            var messaging  = new Mock <IMessagingCenter>();

            var detailsDTO = new SuperheroDetailsDTO
            {
                Id              = 42,
                Name            = "name",
                AlterEgo        = "alterEgo",
                Occupation      = "occupation",
                CityName        = "cityName",
                PortraitUrl     = "https://image.com/portrait.jpg",
                BackgroundUrl   = "https://image.com/background.jpg",
                FirstAppearance = 2000,
                Gender          = Gender.Male,
                Powers          = new[] { "power1", "power2" }
            };

            var client = new Mock <IRestClient>();

            client.Setup(s => s.GetAsync <SuperheroDetailsDTO>("superheroes/42")).ReturnsAsync((HttpStatusCode.OK, detailsDTO));

            var dialog = new Mock <IDialogService>();

            var vm = new SuperheroDetailsViewModel(navigation.Object, messaging.Object, client.Object, dialog.Object);

            var listDTO = new SuperheroListDTO
            {
                Id          = 42,
                AlterEgo    = "alterEgo",
                Name        = "name",
                PortraitUrl = "https://image.com/image.jpg"
            };

            vm.LoadCommand.Execute(listDTO);

            vm.EditCommand.Execute(null);

            navigation.Verify(s => s.EditAsync(It.Is <SuperheroDetailsDTO>(h =>
                                                                           h.Id == 42 &&
                                                                           h.Name == "name" &&
                                                                           h.AlterEgo == "alterEgo" &&
                                                                           h.Occupation == "occupation" &&
                                                                           h.CityName == "cityName" &&
                                                                           h.PortraitUrl == "https://image.com/portrait.jpg" &&
                                                                           h.BackgroundUrl == "https://image.com/background.jpg" &&
                                                                           h.FirstAppearance == 2000 &&
                                                                           h.Gender == Gender.Male &&
                                                                           new HashSet <string> {
                "power1", "power2"
            }.SetEquals(h.Powers)
                                                                           )));

            // Ensure not busy when command finished
            Assert.False(vm.IsBusy);
        }
        private async Task ExecuteSaveCommand()
        {
            IsBusy = true;

            var powers = Powers?.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()) ?? new string[0];

            var superhero = new SuperheroUpdateDTO
            {
                Id              = Id,
                Name            = Name,
                AlterEgo        = AlterEgo,
                Occupation      = Occupation,
                CityName        = CityName,
                PortraitUrl     = PortraitUrl,
                BackgroundUrl   = BackgroundUrl,
                FirstAppearance = FirstAppearance,
                Gender          = Gender,
                Powers          = new HashSet <string>(powers)
            };

            try
            {
                var status = await _client.PutAsync($"superheroes/{Id}", superhero);

                if (status != HttpStatusCode.NoContent)
                {
                    await _dialog.DisplayAlertAsync("Error", $"Error from api: {status}", "OK");
                }
                else
                {
                    var superheroDetailsDTO = new SuperheroDetailsDTO
                    {
                        Id              = Id,
                        Name            = Name,
                        AlterEgo        = AlterEgo,
                        Occupation      = Occupation,
                        CityName        = CityName,
                        PortraitUrl     = PortraitUrl,
                        BackgroundUrl   = BackgroundUrl,
                        FirstAppearance = FirstAppearance,
                        Gender          = Gender,
                        Powers          = superhero.Powers
                    };

                    _messaging.Send(this, UpdateSuperhero, superheroDetailsDTO);
                    await _navigation.CancelAsync();
                }
            }
            catch (Exception e)
            {
                await _dialog.DisplayAlertAsync(e);
            }

            IsBusy = false;
        }
Ejemplo n.º 4
0
        public void LoadCommand_populates_Superhero()
        {
            var navigation = new Mock <INavigationService>();
            var messaging  = new Mock <IMessagingCenter>();
            var dialog     = new Mock <IDialogService>();

            var detailsDTO = new SuperheroDetailsDTO
            {
                Id              = 42,
                Name            = "name",
                AlterEgo        = "alterEgo",
                Occupation      = "occupation",
                CityName        = "cityName",
                PortraitUrl     = "https://image.com/portrait.jpg",
                BackgroundUrl   = "https://image.com/background.jpg",
                FirstAppearance = 2000,
                Gender          = Gender.Male,
                Powers          = new[] { "power1", "power2" }
            };

            var client = new Mock <IRestClient>();

            client.Setup(s => s.GetAsync <SuperheroDetailsDTO>("superheroes/42")).ReturnsAsync((HttpStatusCode.OK, detailsDTO));

            var vm = new SuperheroDetailsViewModel(navigation.Object, messaging.Object, client.Object, dialog.Object);

            var listDTO = new SuperheroListDTO
            {
                Id          = 42,
                AlterEgo    = "alterEgo",
                Name        = "name",
                PortraitUrl = "https://image.com/image.jpg"
            };

            vm.LoadCommand.Execute(listDTO);

            Assert.Equal(42, vm.Id);
            Assert.Equal("alterEgo", vm.AlterEgo);
            Assert.Equal("name", vm.Name);
            Assert.Equal("occupation", vm.Occupation);
            Assert.Equal("cityName", vm.CityName);
            Assert.Equal("https://image.com/portrait.jpg", vm.PortraitUrl);
            Assert.Equal("https://image.com/background.jpg", vm.BackgroundUrl);
            Assert.Equal(2000, vm.FirstAppearance);
            Assert.Equal(Gender.Male, vm.Gender);
            Assert.Collection(vm.Powers,
                              s => Assert.Equal("power1", s),
                              s => Assert.Equal("power2", s)
                              );

            // Ensure not busy when command finished
            Assert.False(vm.IsBusy);
        }
Ejemplo n.º 5
0
        public async Task Get_given_existing_returns_superhero()
        {
            var superhero = new SuperheroDetailsDTO();

            var repository = new Mock <ISuperheroRepository>();

            repository.Setup(s => s.Read(42)).ReturnsAsync(superhero);

            var controller = new SuperheroesController(repository.Object);

            var actual = await controller.Get(42);

            Assert.Equal(superhero, actual.Value);
        }
        public async Task Get_id_given_repository_returns_null_returns_NotFound()
        {
            var superhero  = new SuperheroDetailsDTO();
            var repository = new Mock <ISuperheroRepository>();

            repository.Setup(m => m.ReadAsync(42)).ReturnsAsync(default(SuperheroDetailsDTO));

            var logger = new Mock <ILogger <SuperheroesController> >();

            var controller = new SuperheroesController(repository.Object, logger.Object);

            var result = await controller.Get(42);

            Assert.IsType <NotFoundResult>(result.Result);
        }
        public async Task Get_id_returns_result_from_repository()
        {
            var superhero  = new SuperheroDetailsDTO();
            var repository = new Mock <ISuperheroRepository>();

            repository.Setup(m => m.ReadAsync(42)).ReturnsAsync(superhero);

            var logger = new Mock <ILogger <SuperheroesController> >();

            var controller = new SuperheroesController(repository.Object, logger.Object);

            var result = await controller.Get(42);

            Assert.Equal(superhero, result.Value);
        }
        private void ExecuteLoadCommand(SuperheroDetailsDTO superhero)
        {
            IsBusy = true;

            Title           = superhero.AlterEgo;
            Id              = superhero.Id;
            Name            = superhero.Name;
            AlterEgo        = superhero.AlterEgo;
            PortraitUrl     = superhero.PortraitUrl;
            Occupation      = superhero.Occupation;
            CityName        = superhero.CityName;
            Gender          = superhero.Gender;
            FirstAppearance = superhero.FirstAppearance;
            BackgroundUrl   = superhero.BackgroundUrl;
            Powers          = string.Join(Environment.NewLine, superhero.Powers);

            IsBusy = false;
        }
        private async Task ExecuteSaveCommand()
        {
            IsBusy = true;

            var powers = Powers?.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()) ?? new string[0];

            var superhero = new SuperheroUpdateDTO
            {
                Id              = Id,
                Name            = Name,
                AlterEgo        = AlterEgo,
                Occupation      = Occupation,
                CityName        = CityName,
                PortraitUrl     = PortraitUrl,
                BackgroundUrl   = BackgroundUrl,
                FirstAppearance = FirstAppearance,
                Gender          = Gender,
                Powers          = new HashSet <string>(powers)
            };

            await _client.PutAsync($"superheroes/{Id}", superhero);

            var superheroDetailsDTO = new SuperheroDetailsDTO
            {
                Id              = Id,
                Name            = Name,
                AlterEgo        = AlterEgo,
                Occupation      = Occupation,
                CityName        = CityName,
                PortraitUrl     = PortraitUrl,
                BackgroundUrl   = BackgroundUrl,
                FirstAppearance = FirstAppearance,
                Gender          = Gender,
                Powers          = superhero.Powers
            };

            _messaging.Send(this, UpdateSuperhero, superheroDetailsDTO);
            await _navigation.CancelAsync();

            IsBusy = false;
        }
Ejemplo n.º 10
0
        private void SetSuperhero(SuperheroDetailsDTO value)
        {
            _superhero = value;

            Title           = _superhero.AlterEgo;
            Id              = _superhero.Id;
            Name            = _superhero.Name;
            AlterEgo        = _superhero.AlterEgo;
            PortraitUrl     = _superhero.PortraitUrl;
            Occupation      = _superhero.Occupation;
            CityId          = _superhero.CityId;
            CityName        = _superhero.CityName;
            Gender          = _superhero.Gender;
            FirstAppearance = _superhero.FirstAppearance;
            BackgroundUrl   = _superhero.BackgroundUrl;

            Powers.Clear();
            foreach (var power in _superhero.Powers)
            {
                Powers.Add(power);
            }
        }
Ejemplo n.º 11
0
 public async Task EditAsync(SuperheroDetailsDTO superhero)
 {
     await _navigation.PushModalAsync(new NavigationPage(new EditSuperheroPage(superhero)));
 }