public void VoteFoodTruck_Post_UserWithPriorDownvotePreference_UpVote_Validate_ChangeNewUpVote()
        {
            // Arrange
            List <Models.Preference.PreferenceData> testPreferences = new List <Preference.PreferenceData>()
            {
                new Preference.PreferenceData()
                {
                    userid     = "TestUser1",
                    truckname  = "TestTruck2",
                    preference = 2  // Prior Downvote
                },
            };
            var user = new MockCurrentUser();

            user.setUserId("TestUser1");
            var controller = new HomeController(
                new MockPreferenceRepository(testPreferences),
                new MockTruckDataRepository(),
                user);

            // Act
            JsonResult result = controller.VoteFoodTruck("TestTruck2", "1"); // New Upvote

            // Assert
            dynamic jsonResult = result.Data;

            Assert.IsNotNull(jsonResult);
            Assert.AreEqual(
                true,
                jsonResult.success);
            Assert.AreEqual(
                1,
                jsonResult.newIconColor);
        }
        public void VoteFoodTruck_Post_UserNoPriorPreference_UpVote_Validate_NewUpvote()
        {
            // Arrange
            var user = new MockCurrentUser();

            user.setUserId("TestUser1");
            var controller = new HomeController(
                new MockPreferenceRepository(),
                new MockTruckDataRepository(),
                user);

            // Act
            JsonResult result = controller.VoteFoodTruck("TestTruck2", "1"); // New Upvote

            // Assert
            dynamic jsonResult = result.Data;

            //var pins = result.Data as List<Models.TruckPushpinInfo>;
            Assert.IsNotNull(jsonResult);
            Assert.AreEqual(
                true,
                jsonResult.success);
            Assert.AreEqual(
                1,
                jsonResult.newIconColor);
        }
        public void FilterNeighborhood_Get_AllNeighborhoods_UserWithPreference_2Event2Neighborhood_Validate_2Pins()
        {
            // Arrange
            List <Models.TruckEvent> testEvents = new List <TruckEvent>()
            {
                new TruckEvent()
                {
                    Name         = "TestTruck1",
                    Url          = "www.testtruck1.com",
                    Day          = "Friday",
                    Time         = "Lunch",
                    Neighborhood = "NEU, on Opera Place at Huntington Ave",
                    Coordinates  = new Location("42.3398106,-71.0913604")
                },
                new TruckEvent()
                {
                    Name         = "TestTruck2",
                    Url          = "www.testtruck2.com",
                    Day          = "Friday",
                    Time         = "Lunch",
                    Neighborhood = "SoWa Open Market, 500 Harrison Avenue",
                    Coordinates  = new Location("42.3425311,-71.0674873")
                },
            };
            List <Models.Preference.PreferenceData> testPreferences = new List <Preference.PreferenceData>()
            {
                new Preference.PreferenceData()
                {
                    userid     = "TestUser1",
                    truckname  = "TestTruck2",
                    preference = 1  // Upvote
                },
            };
            var user = new MockCurrentUser();

            user.setUserId("TestUser1");
            var controller = new HomeController(
                new MockPreferenceRepository(testPreferences),
                new MockTruckDataRepository(testEvents),
                user);

            // Act
            JsonResult result = controller.FilterTrucks(Constants.AllNeighborhoodsString, "", "Friday", "Lunch");

            // Assert
            dynamic jsonResult = result.Data;
            var     pins       = jsonResult.PushpinFilteredData as List <Models.TruckPushpinInfo>;

            Assert.IsNotNull(pins);
            Assert.AreEqual(pins.Count, 2);
            Assert.AreEqual(pins[1].truckName, "TestTruck2");
            Assert.AreEqual(pins[1].location, "SoWa Open Market, 500 Harrison Avenue");
            Assert.AreEqual(pins[1].longitude, (Double)(-71.0674873));
            Assert.AreEqual(pins[1].preference, 1);
        }
        public void Index_Get_IndexView_UserWithPreferenceUpvote_1Event_Validate_1Pin()
        {
            // Arrange
            List <Models.TruckEvent> testEvents = new List <TruckEvent>()
            {
                new TruckEvent()
                {
                    Name         = "TestTruck1",
                    Url          = "www.testtruck1.com",
                    Day          = "Friday",
                    Time         = "Lunch",
                    Neighborhood = "NEU, on Opera Place at Huntington Ave",
                    Coordinates  = new Location("42.3398106,-71.0913604")
                },
            };
            List <Models.Preference.PreferenceData> testPreferences = new List <Preference.PreferenceData>()
            {
                new Preference.PreferenceData()
                {
                    userid     = "TestUser1",
                    truckname  = "TestTruck1",
                    preference = 1  // Upvote
                },
            };
            var user = new MockCurrentUser();

            user.setUserId("TestUser1");
            var controller = new HomeController(
                new MockPreferenceRepository(testPreferences),
                new MockTruckDataRepository(testEvents),
                user);

            // Act
            ViewResult result = controller.Index(setDay: "Friday", setMeal: "Lunch");

            // Assert
            var pinsString = result.ViewData["CurrentTruckPins"] as string;
            JavaScriptSerializer           serializer = new JavaScriptSerializer();
            List <Models.TruckPushpinInfo> pins       = serializer.Deserialize <List <Models.TruckPushpinInfo> >(pinsString);

            Assert.IsNotNull(pins);
            Assert.AreEqual(pins.Count, 1);
            Assert.AreEqual(pins[0].truckName, "TestTruck1");
            Assert.AreEqual(pins[0].location, "NEU, on Opera Place at Huntington Ave");
            Assert.AreEqual(pins[0].longitude, (Double)(-71.0913604));
            Assert.AreEqual(pins[0].preference, 1);
        }
        public void FilterNeighborhood_Get_SameTruckIn2LocationsOnSameDay_UserWithPreference_5Event2Neighborhood_Validate_2Pins()
        {
            // Arrange
            List <Models.TruckEvent> testEvents = new List <TruckEvent>()
            {
                new TruckEvent()
                {
                    Name         = "TestTruck1",
                    Url          = "www.testtruck1.com",
                    Day          = "Friday",
                    Time         = "Lunch",
                    Neighborhood = "NEU, on Opera Place at Huntington Ave",
                    Coordinates  = new Location("42.3398106,-71.0913604")
                },
                new TruckEvent()
                {
                    Name         = "TestTruck2",
                    Url          = "www.testtruck2.com",
                    Day          = "Friday",
                    Time         = "Lunch",
                    Neighborhood = "SoWa Open Market, 500 Harrison Avenue",
                    Coordinates  = new Location("42.3425311,-71.0674873")
                },
                new TruckEvent()
                {
                    Name         = "TestTruck3",
                    Url          = "www.testtruck3.com",
                    Day          = "Friday",
                    Time         = "Lunch",
                    Neighborhood = "SoWa Open Market, 500 Harrison Avenue",
                    Coordinates  = new Location("42.3425311,-71.0674873")
                },
                new TruckEvent()
                {
                    Name         = "TestTruck4",
                    Url          = "www.testtruck4.com",
                    Day          = "Friday",
                    Time         = "Dinner",
                    Neighborhood = "SoWa Open Market, 500 Harrison Avenue",
                    Coordinates  = new Location("42.3425311,-71.0674873")
                },
                new TruckEvent()
                {
                    Name         = "TestTruck3",
                    Url          = "www.testtruck3.com",
                    Day          = "Friday",
                    Time         = "Lunch",
                    Neighborhood = "NEU, on Opera Place at Huntington Ave",
                    Coordinates  = new Location("42.3398106,-71.0913604")
                }
            };
            List <Models.Preference.PreferenceData> testPreferences = new List <Preference.PreferenceData>()
            {
                new Preference.PreferenceData()
                {
                    userid     = "TestUser1",
                    truckname  = "TestTruck3",
                    preference = 2  // Downvote
                },
            };
            var user = new MockCurrentUser();

            user.setUserId("TestUser1");
            var controller = new HomeController(
                new MockPreferenceRepository(testPreferences),
                new MockTruckDataRepository(testEvents),
                user);

            //Expected Dropdown lists
            var expectedNeighborhoodList = new List <String>();

            expectedNeighborhoodList.Add(Constants.AllNeighborhoodsString);
            expectedNeighborhoodList.Add("NEU, on Opera Place at Huntington Ave");
            expectedNeighborhoodList.Add("SoWa Open Market, 500 Harrison Avenue");

            var expectedTruckNameList = new List <String>();

            expectedTruckNameList.Add(Constants.AllTrucksString);
            expectedTruckNameList.Add("TestTruck3");

            // Act
            JsonResult result = controller.FilterTrucks(Constants.AllNeighborhoodsString, "TestTruck3", "Friday", "Lunch");

            // Assert
            dynamic jsonResult = result.Data;

            CollectionAssert.AreEqual(expectedNeighborhoodList, jsonResult.FilteredNeighborhoods);
            CollectionAssert.AreEqual(expectedTruckNameList, jsonResult.FilteredTrucks);
            var pins = jsonResult.PushpinFilteredData as List <Models.TruckPushpinInfo>;

            Assert.IsNotNull(pins);
            Assert.AreEqual(2, pins.Count);
            Assert.AreEqual("TestTruck3", pins[0].truckName);
            Assert.AreEqual("SoWa Open Market, 500 Harrison Avenue", pins[0].location);
            Assert.AreEqual((Double)(-71.0674873), pins[0].longitude);
            Assert.AreEqual(2, pins[0].preference);
            Assert.AreEqual("TestTruck3", pins[1].truckName);
            Assert.AreEqual("NEU, on Opera Place at Huntington Ave", pins[1].location);
            Assert.AreEqual((Double)(-71.0913604), pins[1].longitude);
            Assert.AreEqual(2, pins[1].preference);
        }