/**
         * tu sa budu ziskavat vsetky udalosti na vybrany mesiac (alebo ak si prisposobim tak napriklad
         * na tento mesiac + mesiac dozadu + mesiac dopredu
         * a to znamena vsetky treningy, zapasy, brigady a informacie
         * -- ZATIAL VSETKY
         */
        public async Task InitializeEvents()
        {
            var trainingsServices = new TrainingsServices();
            var brigadesServices  = new BrigadesServices();
            var matchesServices   = new MatchesServices();

            var eventsHelp = new ObservableCollection <Event>();

            IsBusy = true;

            //if (this.Events == null || (this.Events != null && !this.Events.Any()))
            //{
            eventsHelp.AddRange(await trainingsServices.GetTrainingsForMonthAsync(DateTime.Now));
            eventsHelp.AddRange(await brigadesServices.GetBrigadesForMonth(DateTime.Now));
            eventsHelp.AddRange(await matchesServices.GetMatchesForMonth(DateTime.Now));
            //}

            if (eventsHelp.Count > 0) // akutalizujem eventy iba ak som nejaky vytiahol z db
            {
                this.Events = null;
                this.Events = new ObservableCollection <Event>();
                this.Events = eventsHelp;
            }
            IsBusy = false;
            this.UpdateSelectedEvents(this.selectedDate);
        }
        public void Test_GetMatchesByUserId_Fail_BadRequest()
        {
            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);

            Assert.ThrowsAsync <ArgumentException>(() => matchesServices.GetMatchesByUserId(0, "token"));

            _matchesRepository.Verify(m => m.GetMatchesByUserId(It.IsAny <long>()), Times.Never);
        }
        public void Test_GetNewPotentialMatches_Fail_EmtpyLocation()
        {
            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);

            Assert.ThrowsAsync <ArgumentException>(() => matchesServices.GetNewPotentialMatches("", "token", 1));

            _userServices.Verify(u => u.GetUsersByLocation(It.IsAny <string>(), It.IsAny <string>()), Times.Never);
        }
        public async Task <bool> DeleteGoalOpponentAsync(Goal goal)
        {
            IsBusy = true;
            var matchesServices = new MatchesServices();
            var success         = await matchesServices.DeleteGoalOpponentAsync(goal.Id);

            IsBusy = false;
            return(success);
        }
        public void Test_GetMatchByMatchId_Fail_InvalidId()
        {
            _matchesRepository.Setup(u => u.GetMatchByMatchId(It.IsAny <long>()));

            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);

            Assert.ThrowsAsync <Exception>(() => matchesServices.GetMatchByMatchId(1, "token"));

            _matchesRepository.Verify(u => u.GetMatchByMatchId(It.IsAny <long>()), Times.Once);
        }
        public void Test_UpsertMatches_BadRequest_EmptyList()
        {
            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);

            Assert.ThrowsAsync <ArgumentException>(() => matchesServices.UpsertMatches(new List <DomainMatch>(), "token"));

            _matchesRepository.Verify(m => m.UpsertMatches(It.IsAny <List <Matches> >()), Times.Never);
            _matchesRepository.Verify(m => m.GetMatchByMatchId(It.IsAny <long>()), Times.Never);
            _userServices.Verify(u => u.GetUsersByUserId(It.IsAny <List <long> >(), It.IsAny <string>()), Times.Never);
        }
        public void Test_GetMatchesByUserId_Fail_InternalError()
        {
            _matchesRepository.Setup(m => m.GetMatchesByUserId(It.IsAny <long>()));

            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);

            Assert.ThrowsAsync <Exception>(() => matchesServices.GetMatchesByUserId(1, "token"));

            _matchesRepository.Verify(m => m.GetMatchesByUserId(It.IsAny <long>()), Times.Once);
        }
        public async Task <bool> DeleteSelectedMatchAsync()
        {
            IsBusy = true;
            var matchesServices = new MatchesServices();
            var success         = await matchesServices.DeleteMatchAsync(_selectedMatch.Id);

            IsBusy = false;

            return(success);
        }
        public async Task Test_GetMatchByMatchId_Success()
        {
            _matchesRepository.Setup(u => u.GetMatchByMatchId(It.IsAny <long>()))
            .ReturnsAsync(new Matches()
            {
                Id = 1, FirstUserId = 1, SecondUserId = 2, Liked = true, Matched = false
            });

            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);

            await matchesServices.GetMatchByMatchId(1, "token");

            _matchesRepository.Verify(u => u.GetMatchByMatchId(It.IsAny <long>()), Times.Once);
        }
        public async Task RefreshSelectedMatch()
        {
            IsBusy = true;
            var matchesServices = new MatchesServices();
            var match           = await matchesServices.GetMatchById(_selectedMatch.Id);

            if (match != null && match.GrassGoals != null && match.OpponentGoals != null)
            {
                SelectedMatch              = match;
                SelectedMatchGrassGoals    = _selectedMatch.GrassGoals;
                SelectedMatchOpponentGoals = _selectedMatch.OpponentGoals;
            }
            IsBusy = false;
        }
        public void Test_UpsertMatches_BadRequest_NullToken()
        {
            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);

            Assert.ThrowsAsync <ArgumentException>(() => matchesServices.UpsertMatches(new List <DomainMatch>()
            {
                { new DomainMatch()
                  {
                      Id = 5, FirstUserId = 1, SecondUserId = 2, Liked = true
                  } }
            }, null));

            _matchesRepository.Verify(m => m.UpsertMatches(It.IsAny <List <Matches> >()), Times.Never);
            _matchesRepository.Verify(m => m.GetMatchByMatchId(It.IsAny <long>()), Times.Never);
            _userServices.Verify(u => u.GetUsersByUserId(It.IsAny <List <long> >(), It.IsAny <string>()), Times.Never);
        }
        public async Task Test_GetNewPotentialMatches_Success_NoMatches()
        {
            _userServices.Setup(u => u.GetUsersByLocation(It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(new List <UserServicesUser>()
            {
                { new UserServicesUser()
                  {
                      Id = 1, About = "", FirstName = "firstname", LastName = "", Location = "San Diego", Gender = true, Interests = "", Username = "******"
                  } }
            });

            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);
            await matchesServices.GetNewPotentialMatches("San Diego", "token", 1);

            _userServices.Verify(u => u.GetUsersByLocation(It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }
        public async Task Test_UpsertMatches_Success()
        {
            _matchesRepository.Setup(m => m.UpsertMatches(It.IsAny <List <Matches> >()))
            .Returns(Task.CompletedTask);
            _matchesRepository.Setup(m => m.GetMatchByMatchId(It.IsAny <long>()))
            .ReturnsAsync(new Matches()
            {
                Id           = 1,
                FirstUserId  = 1,
                SecondUserId = 2,
                Liked        = true
            });
            _userServices.Setup(u => u.GetUsersByUserId(It.IsAny <List <long> >(), It.IsAny <string>()))
            .ReturnsAsync(new List <UserServicesUser>()
            {
                { new UserServicesUser()
                  {
                      Id = 1
                  } },
                { new UserServicesUser()
                  {
                      Id = 2
                  } }
            });

            var matchesServices = new MatchesServices(_matchesRepository.Object, _userServices.Object);
            await matchesServices.UpsertMatches(new List <DomainMatch>()
            {
                { new DomainMatch()
                  {
                      Id = 5, FirstUserId = 1, SecondUserId = 2, Liked = true
                  } }
            }, "token");

            _matchesRepository.Verify(m => m.UpsertMatches(It.IsAny <List <Matches> >()), Times.Once);
            _matchesRepository.Verify(m => m.GetMatchByMatchId(It.IsAny <long>()), Times.AtLeastOnce);
            _userServices.Verify(u => u.GetUsersByUserId(It.IsAny <List <long> >(), It.IsAny <string>()), Times.AtLeastOnce);
        }