public void AddAdvertisement_WithValidAd_AddsCurrentNewspaperItemToNewspapersCollectionInTheAddedAd()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var detailViewModel = new NewspaperDetailViewModel(repository);
            var collectionViewModel = new NewspaperCollectionViewModel(repository);
            var paperModel1 = new Newspaper() {Name = "New paper 1"};
            var paperItemViewModel1 = new NewspaperItemViewModel(repository) {Model = paperModel1};
            var adModel = new Advertisement() {Name = "Ad 1 Name", Text = "Ad 1 text."};
            var adItemViewModel = new AdvertisementItemViewModel(repository) {Model = adModel};
            collectionViewModel.Newspapers.Add(paperItemViewModel1);
            collectionViewModel.CurrentItem.Should().Be(paperItemViewModel1, "The current item is the item that was added.");
            detailViewModel.ItemViewModel.Should().Be(collectionViewModel.CurrentItem,
                                                      "The detail view model references the collection's current item.");
            paperItemViewModel1.Advertisements.Count.Should().Be(0, "No newspapers are referenced in the advertisement.");
            adItemViewModel.Newspapers.Count.Should().Be(0, "There are no papers in this ad's collection.");

            //	Act
            paperItemViewModel1.Advertisements.Add(adItemViewModel);

            //	Assert
            paperItemViewModel1.Advertisements.Count.Should().Be(1, "One item was added");
            adItemViewModel.Newspapers.Count.Should().Be(1, "One newspaper reference was added to this advertisement.");
            adItemViewModel.Newspapers.ToList().First().Should().Be(collectionViewModel.CurrentItem,
                                                                    "The paper added to the advertisment's newspaper collection was the Newspaper collection's CurrentItem");
        }
Example #2
0
        private async Task <Models.User> RetrieveAuthor(Models.Advertisement Advertisement)
        {
            var userCollection = MongoWrapper.Database.GetCollection <Models.User>(nameof(User));

            var userFilterBuilder = new FilterDefinitionBuilder <Models.User>();
            var userFilter        = userFilterBuilder.And
                                    (
                userFilterBuilder.Eq(u => u._id, Advertisement.Poster._id),
                GeneralUtils.NotDeactivated(userFilterBuilder)
                                    );

            var userProjectionBuilder = new ProjectionDefinitionBuilder <Models.User>();
            var userProjection        = userProjectionBuilder
                                        .Include(m => m._id)
                                        .Include(m => m.FullName)
                                        .Include(m => m.Avatar)
                                        .Include(m => m.Phone)
                                        .Include(m => m.StartDate)
                                        .Include(m => m.Email)
                                        .Include(m => m.Address)
                                        .Include("_t");

            return((await userCollection.FindAsync(userFilter, new FindOptions <Models.User>
            {
                Limit = 1,
                AllowPartialResults = true,
                Projection = userProjection
            })).SingleOrDefault());
        }
 public AdvertisementViewModel(Advertisement model, IRepository<Advertisement, Guid> repository)
     : base(model)
 {
     _model = model;
     _repository = repository;
     SaveCommand = new RelayCommand(new Action<object>(SaveCommand_Handler));
     DeleteCommand = new RelayCommand(new Action<object>(DeleteCommand_Handler));
 }
Example #4
0
 private void EnrichAdvertisementWithAuthor(Models.Advertisement Advertisement, Models.User user)
 {
     if (user == null)
     {
         Logger.LogWarning("Advertisement Author was not found! Advertisement id: {}, Poster id: {}", Advertisement._id, Advertisement.Poster._id);
     }
     else
     {
         Advertisement.Poster = (Contractor)user;
     }
 }
        public void DeleteAdvertisement(Advertisement entity)
        {
            if (_advertisementCache.ContainsKey(entity.UKey))
            {
                _advertisementCache.Remove(entity.UKey);

                foreach (var paper in entity.Newspapers)
                    _newspaperCache[paper.UKey].Advertisements.Remove(entity);
            }

            _serializer.SaveCache(_newspaperCache);
        }
        public void AddNewspaper_WithNull_DoesNotChangeTheNewspapersCollection()
        {
            //	Arrange
            var advertisement = new Advertisement {Name = "Test Ad 1", Text = "Test ad 1 text."};

            //	Act

            advertisement.AddNewspaper(null);

            //	Assert

            advertisement.Newspapers.ShouldAllBeEquivalentTo(new List<Newspaper>());
        }
        public void AddNewspaper_MultipleTimesWithValidNewspaperObjects_CreatesAReferenceToEachPaper()
        {
            //  Arrange
            var paper1 = new Newspaper() {Name = "Paper 1 name"};
            var paper2 = new Newspaper() {Name = "Paper 2 name"};
            var ad = new Advertisement {Name = "Test ad 1 name", Text = "Test ad 1 text."};

            //  Act

            ad.AddNewspaper(paper1);
            ad.AddNewspaper(paper2);

            //  Assert
            ad.Newspapers.ShouldBeEquivalentTo(new List<Newspaper> {paper2, paper1});
        }
        public void AddAdvertisement_WithValidAdvertisement_AddsNewspaperToAdvertisementNewspaperssCollection()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var paperModel = new Newspaper();
            var adModel = new Advertisement();
            var adItemViewModel = new AdvertisementItemViewModel(repository) {Model = adModel};
            var adDetailViewModel = new AdvertisementDetailViewModel(repository) {ItemViewModel = adItemViewModel};
            var detailViewModel = new NewspaperDetailViewModel(repository)
                                  {ItemViewModel = new NewspaperItemViewModel(repository) {Model = paperModel}};

            //	Act
            detailViewModel.Advertisements.Add(adItemViewModel);
            //	Assert
            detailViewModel.Advertisements.ToList().First().Newspapers.Contains(detailViewModel.ItemViewModel);
        }
        public void AddAdvertisement_WithValidAdvertisement_AddsAdvertisementToAdvertisementsCollection()
        {
            //	Arrange
            var repository = Substitute.For<INewspaperAdRepository>();
            var paperModel = new Newspaper();
            var adModel = new Advertisement();
            var adItemViewModel = new AdvertisementItemViewModel(repository) {Model = adModel};
            var adDetailViewModel = new AdvertisementDetailViewModel(repository) {ItemViewModel = adItemViewModel};
            var detailViewModel = new NewspaperDetailViewModel(repository)
                                  {ItemViewModel = new NewspaperItemViewModel(repository) {Model = paperModel}};

            //	Act
            detailViewModel.Advertisements.Add(adItemViewModel);
            //	Assert
            detailViewModel.Advertisements.Count.Should().Be(1, "There should be one item in the collection");
        }
        public void AddNewspapers_WithListOfValidNewspaperstestAddsAllItemsToNewspapersCollection()
        {
            //  Arrange
            var paper1 = new Newspaper() {Name = "Paper 1 name"};
            var paper2 = new Newspaper() {Name = "Paper 2 name"};
            var paper3 = new Newspaper() {Name = "Paper 3 name"};
            var paperList = new List<Newspaper> {paper1, paper2, paper3};

            var ad = new Advertisement {Name = "Test ad 1 name", Text = "Test ad 1 text."};

            //  Act
            ad.AddNewspapers(paperList);

            //Assert

            ad.Newspapers.ShouldAllBeEquivalentTo(paperList);
        }
        public void AddNewspapers_WithNullNewspaperList_ReturnsTheOriginalNewspapersCollection()
        {
            //	Arrange
            var paper1 = new Newspaper() {Name = "Paper 1 name"};
            var paper2 = new Newspaper() {Name = "Paper 2 name"};
            var paper3 = new Newspaper() {Name = "Paper 3 name"};
            var ad = new Advertisement {Name = "Test ad 1 name", Text = "Test ad 1 text."};
            var paperList = new List<Newspaper> {paper1, paper3, paper2};

            ad.AddNewspaper(paper1);
            ad.AddNewspaper(paper2);
            ad.AddNewspaper(paper3);

            //  Act

            ad.AddNewspapers(null);

            //	Assert

            ad.Newspapers.ShouldAllBeEquivalentTo(paperList);
        }
 private AdvertisementItemViewModel GetValidAdvertisementItemViewModel(Advertisement ad = null,
                                                                       INewspaperAdRepository adRepository = null)
 {
     var model = ad ?? new Advertisement {Name = "<New Advertisement>", Text = "<New Advertisemnet body text."};
     var repo = adRepository ?? Substitute.For<INewspaperAdRepository>();
     var vm = new AdvertisementItemViewModel(repo) {Model = model};
     return vm;
 }
        public void AddNewspaper_WithValidNewspaperObject_CreatesAReferenceToThatNewspaper()
        {
            //  Arrange
            var paper = new Newspaper() {Name = "Test Paper 1"};
            var advertisement = new Advertisement {Name = "Test Ad 1", Text = "Test ad 1 text."};

            //  Act
            advertisement.AddNewspaper(paper);

            //Assert
            advertisement.Newspapers.ShouldAllBeEquivalentTo(new List<Newspaper> {paper},
                                                             "A paper added to an advertisement adds a reference to that paper.");
        }
        private void AddingItemMessageHandler(AddingAdvertisementItemMessage obj)
        {
            var model = new Advertisement();
            var vm = new AdvertisementItemViewModel(_adRepository) {Model = model};
            Advertisements.Add(vm);
            var sortedAds = Advertisements.OrderBy(a => a.Name).ToList();
            Advertisements.Clear();
            sortedAds.ForEach(Advertisements.Add);

            Messenger.Default.Send(new CurrentAdvertisementItemChangedMessage(vm));
        }
        public void DbStatus_OnNewObject_IsSetToAdded()
        {
            var testAd = new Advertisement {Name = "Test Ad 1 Name", Text = "Test Ad 1 Text"};

            testAd.IsAdded.Should().Be(true, "A new object should be in the Added state");
        }
        public void Newspapers_SetToNull_SetsNewspapersToAnEmptyCollection()
        {
            //	Arrange
            var testAd = new Advertisement {Name = "Test ad 1 name", Text = "Test ad 1 text."};

            var testPaper1 = new Newspaper() {Name = "Test Paper 1 Name"};
            var testPaper2 = new Newspaper() {Name = "Test Paper 2 Name"};
            var testPaper3 = new Newspaper() {Name = "Test Paper 3 Name"};

            testAd.Newspapers = new ObservableCollection<Newspaper>() {testPaper1, testPaper2, testPaper3};
            testAd.Newspapers.Count.Should().Be(3, "All papers were added to the ad");

            //	Act
            testAd.Newspapers = null;

            //	Assert
            testAd.Newspapers.ShouldBeEquivalentTo(new List<Newspaper>(),
                                                   "Newspaper collection is set to empty list when null is assigned to it.");
        }
        public void HasErrors_WhenTrueAndSetToANonNullValue_IsFalse()
        {
            //	Arrange
            var testAd = new Advertisement {Name = null, Text = "test text"};
            testAd.HasErrors.Should().Be(true, "Creating an object without a name sets name status to invalid");

            //	Act
            var testName = "New Test Name";
            testAd.Name = testName;
            testAd.Name.Should().Be(testName, "The name change was successful");

            //	Assert
            testAd.HasErrors.Should().Be(false, "The status of Name is true when a non-null assignment is made.");
        }
        public void HasErrors_WhenObjectCreatedWithNonNullTextSpecified_IsFalse()
        {
            //  Arrange
            var testAd = new Advertisement {Name = "Test ad name", Text = "Test ad text."};

            //  Act
            //  Assert
            testAd.HasErrors.Should().Be(false, "Advertisements must have text");
        }
        public void HasErrors_WhenNameIsSetToNull_RetunsTrue()
        {
            //	Arrange

            var testAd = new Advertisement {Name = "Test ad name", Text = "Test ad text"};
            testAd.HasErrors.Should().Be(false, "Verify that Name is valid when object is created.");

            //	Act
            testAd.Name = null;

            //	Assert
            testAd.HasErrors.Should().Be(true, "Setting the name of an Advertisement makes the Name invalid.");
        }
        public void HasErrors_WhenFalseAndSetToANonNullValue_IsFalse()
        {
            //	Arrange

            var testAd = new Advertisement {Name = "Test ad name", Text = "Test ad text."};
            testAd.HasErrors.Should().Be(false, "Verify that the flag is already valid.");

            //	Act

            var newName = "New Test Ad Name";
            testAd.Name = newName;

            //	Assert
            testAd.Name.Should().Be(newName, "Verify the name was changed.");
            testAd.HasErrors.Should().Be(false, "Any new text value assigned to Name is valid.");
        }
Example #21
0
        public void RemoveAdvertisement_WithAnAdvertisementInTheAdvertisementsCollection_RemovesThatAdvertisementFromTheCollection()
        {
            //  Arrange
            var paper = new Newspaper();
            var ad1 = new Advertisement {Name = "Test Ad 1 Name", Text = "Test Ad 1 Text"};
            var ad2 = new Advertisement {Name = "Test Ad 2 Name", Text = "Test Ad 2 Text"};
            paper.AddAdvertisement(ad1);
            paper.AddAdvertisement(ad2);

            //  act

            paper.RemoveAdvertisement(ad2);

            //  Assert
            paper.Advertisements.Should().BeEquivalentTo(new List<Advertisement> {ad1},
                                                         "Removing the second added Ad results in only the first being left.");
        }
Example #22
0
        public void AddAdvertisments_WithAListOfAdvertisements_PopulatesTheAdvertisementsCollectionWithoutDuplicates()
        {
            //	Arrange

            var paper = GetNamedNewspaperWithValidAdvertisements();
            var localAdList = new List<Advertisement>(paper.Advertisements);

            paper.Advertisements.ShouldAllBeEquivalentTo(localAdList, "All advertisements should be added");

            var newAd = new Advertisement {Name = "New test ad", Text = "New test ad text"};
            localAdList.Add(newAd);

            //	Act
            paper.AddAdvertisements(localAdList);

            //	Assert
            paper.Advertisements.ShouldAllBeEquivalentTo(localAdList,
                                                         "All non-duplicate advertisements added from a list appear in the Newspaper Advertisements collection");
        }
        public void HasErrors_WhenObjectCreatedWithoutNameSpecified_IsTrue()
        {
            //  Arrange
            var testAd = new Advertisement {Name = null, Text = "Test ad text"};

            //  Act
            //  Assert
            testAd.HasErrors.Should().Be(true, "Advertisments must have a name.");
        }
Example #24
0
        public void AddAdvertisements_WithANullList_DoesNotChangeTheAdvertisementsCollection()
        {
            //	Arrange
            var paper = GetNamedNewspaper();
            var ad1 = new Advertisement {Name = "Test ad 1 name", Text = "Test ad 1 text"};
            var ad2 = new Advertisement {Name = "Test ad 2 name", Text = "Test ad 2 text"};
            var ad3 = new Advertisement {Name = "Test ad 2 name", Text = "Test ad 3 text"};

            var localAdList = new List<Advertisement> {ad1, ad2, ad3};
            paper.AddAdvertisements(localAdList);

            paper.Advertisements.ShouldAllBeEquivalentTo(localAdList,
                                                         "All original advertisements were added to the Newspaper Advertisements collection");

            //	Act
            paper.AddAdvertisements(null);

            //	Assert
            paper.Advertisements.ShouldAllBeEquivalentTo(localAdList,
                                                         "Adding a null list does not impact the Newspaper Advertisements collection");
        }
        public void Name_WhenModified_PerformsPropertyChangedCallback()
        {
            //	Arrange
            const string AD_NAME = "Test ad 1 name";
            const string NEW_AD_NAME = "New ad name";

            var testAd = new Advertisement {Name = AD_NAME};
            var eventAssert = new PropertyChangedEventAssert(testAd);

            testAd.Name.Should().Be(AD_NAME, "Ad name set properly");
            eventAssert.ExpectNothing();
            testAd.Name = NEW_AD_NAME;
            eventAssert.Expect("Name");
        }
Example #26
0
        public void AddAdvertisement_WithAValidAdvertisement_AddsTheAdvertisementToTheAdvertisementsCollection()
        {
            //	Arrange

            var paper = GetNamedNewspaperWithValidAdvertisements();
            var localAdList = new List<Advertisement>(paper.Advertisements);
            var localCount = localAdList.Count;

            paper.Advertisements.ShouldAllBeEquivalentTo(localAdList, "All advertisements should be added");

            var newAd = new Advertisement {Name = "New test ad", Text = "New test ad text"};
            localAdList.Add(newAd);

            localAdList.Count.Should().Be(localCount + 1, "The new ad should be added to the local list.");

            //	Act
            paper.AddAdvertisement(newAd);

            //	Assert
            paper.Advertisements.ShouldAllBeEquivalentTo(localAdList,
                                                         "The local and object Advertisement lists should have the same contents.");
        }
        public void HasErrors_WhenObjectCreatedWithNonEmptyNameSpecified_IsFalse()
        {
            //  Arrange
            var testAd = new Advertisement {Name = "Test Ad", Text = "Test ad text"};

            //  Act
            //  Assert
            testAd.HasErrors.Should().Be(false, "Any name for an ad is valid");
        }
Example #28
0
        public void RemoveAdvertisement_OnEmptyCollection_ReturnsEmptyCollection()
        {
            //	Arrange

            var paper = GetNamedNewspaper();
            var ad = new Advertisement {Name = "Name", Text = "Text"};
            paper.Advertisements.Count.Should().Be(0, "No items are in the list.");
            //	Act

            paper.RemoveAdvertisement(ad);

            //	Assert
            paper.Advertisements.Count.Should().Be(0, "Still no items in the list, no errors occurred during the remove");
        }
        public void HasErrors_WhenObjectCreatedWithTextSetToNull_IsTrue()
        {
            //  Arrange
            var testAd = new Advertisement {Name = "Test ad name", Text = null};

            //  Act
            //  Assert
            testAd.HasErrors.Should().Be(true, "Advertisements must have text");
        }
Example #30
0
        public void RemoveAdvertisement_WithANullAdvertisement_DoesNotChangeTheAdvertisementsConnection()
        {
            //  Arrange
            var paper = new Newspaper();
            var ad1 = new Advertisement {Name = "Test Ad 1 Name", Text = "Test Ad 1 Text"};
            var ad2 = new Advertisement {Name = "Test Ad 2 Name", Text = "Test Ad 2 Text"};
            paper.AddAdvertisement(ad1);
            paper.AddAdvertisement(ad2);

            //  act

            paper.RemoveAdvertisement(null);

            //  Assert
            paper.Advertisements.Should().BeEquivalentTo(new List<Advertisement> {ad1, ad2},
                                                         "Removing a null item results in nothing being removed.");
        }
        public void HasErrors_WhenTextIsSetToNull_ReturnsTrue()
        {
            //	Arrange

            var testAd = new Advertisement {Name = "Test Ad", Text = "Test ad text"};
            testAd.HasErrors.Should().Be(false, "Confirm status is valid for text after creation.");

            //	Act

            testAd.Text = null;

            //	Assert

            testAd.HasErrors.Should().Be(true, "Null text is not valid in an ad.");
        }
        public async Task <dynamic> Post([FromBody] CreateAdvertisementRequest requestBody)
        {
            var userId = new ObjectId(this.GetCurrentUserId());

            var userCollection = MongoWrapper.Database.GetCollection <Models.Contractor>(nameof(Models.User));

            var userFilterBuilder = new FilterDefinitionBuilder <Models.Contractor>();
            var userFilter        = userFilterBuilder.And
                                    (
                GeneralUtils.NotDeactivated(userFilterBuilder),
                userFilterBuilder.Eq(u => u._id, userId)
                                    );

            var userProjectionBuilder = new ProjectionDefinitionBuilder <Models.Contractor>();
            var userProjection        = userProjectionBuilder
                                        .Include(m => m._id)
                                        .Include(m => m.FullName)
                                        .Include(m => m.Avatar)
                                        .Include(m => m.FileBytesLimit)
                                        .Include(m => m.FileBytesOccupied)
                                        .Include("_t");

            var userTask = userCollection.FindAsync(userFilter, new FindOptions <Models.Contractor>
            {
                Limit = 1,
                AllowPartialResults = false,
                Projection          = userProjection
            });

            Models.Contractor user = null;

            List <(FileReference, Func <Task>)> files             = new List <(FileReference, Func <Task>)>();
            Task <(FileReference, Func <Task>)> fileReferenceTask = Task.FromResult <(FileReference, Func <Task>)>((null, () => Task.CompletedTask));

            if (requestBody.Midias != null)
            {
                long totalSize = 0;
                foreach (MidiaRequest midiaRequest in requestBody.Midias)
                {
                    if (midiaRequest.Id != null)
                    {
                        fileReferenceTask = GeneralUtils.GetFileForReferenceToken
                                            (
                            MongoWrapper,
                            midiaRequest.Id,
                            userId
                                            );
                        var(fileReference, expirer) = await fileReferenceTask;
                        totalSize += fileReference.FileInfo.Size;
                        files.Add((fileReference, expirer));
                    }
                }
                user = (await userTask).Single();
                GeneralUtils.CheckSizeForUser(totalSize, user.FileBytesOccupied, user.FileBytesLimit);
            }

            var postCollection = MongoWrapper.Database.GetCollection <Models.Advertisement>(nameof(Models.Advertisement));

            var creationDate = DateTime.UtcNow;

            var ad = new Models.Advertisement
            {
                _id            = ObjectId.GenerateNewId(creationDate),
                Title          = requestBody.Titulo,
                Text           = requestBody.Descricao,
                FileReferences = files.Select(f => f.Item1).ToList(),
                Position       = requestBody.Coordenada == null ? null : new GeoJsonPoint <GeoJson3DGeographicCoordinates>(requestBody.Coordenada.ToGeoJsonCoordinate()),
                Poster         = user ?? (await userTask).Single(),
            };

            await postCollection.InsertOneAsync(ad);

            files.AsParallel().ForAll(async f => await f.Item2());

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Data = ad._id,
                Message = "Postagem criada com sucesso!",
                Success = true
            });
        }
        public void HasErrors_WhenTextSetToAnyNonEmptyString_IsFalse()
        {
            //  Arrange
            var testAd = new Advertisement {Name = "Test Ad", Text = null};
            testAd.HasErrors.Should().Be(true, "Verify HasErrors is false with null value.");

            //  Act
            //  Assert
            testAd.Text = "Ad text body.";
            testAd.HasErrors.Should().Be(false, "Any text for an ad is valid.");
        }