예제 #1
0
class TestAverageListing(unittest.TestCase):
    def setUp(self):
        directory = './unittests/output'
        if os.path.exists(directory):
            shutil.rmtree(directory)
        os.makedirs(directory)

        self.listing_db = ListingDataBase("./unittests/output/listings.db")
        self.listing_db.insert_csv_into_db("./unittests/input/listings.csv")

    def test_find_avg_price(self):
        """
        Checks if the average is calculated correctly
        """
        average_listing = AverageListing(self.listing_db)
        average = average_listing.find_avg_price("other")

        self.assertEqual(average, 31472)

    def test_generate_dict_avg_listing(self):
        """
        Checks if average calculated in dict is correct
        """
        average_listing = AverageListing(self.listing_db)
        avg_listing_dict = average_listing.generate_dict_avg_listing()

        self.assertEqual(avg_listing_dict["dealer"], 22102)
        self.assertEqual(avg_listing_dict["private"], 38471)
        self.assertEqual(avg_listing_dict["other"], 31472)
예제 #2
0
class Constructor:
    """
    Main class which runs all the operations
    """
    def __init__(self):
        directory = './output'
        if os.path.exists(directory):
            shutil.rmtree(directory)
        os.makedirs(directory)

    def databases_constructor(self):
        """
        Operations for converting the csv input files into database
        """
        self.listing = ListingDataBase("./output/listings.db")
        self.listing.insert_csv_into_db("./input/listings.csv")

        self.contacts = ContactsDataBase("./output/contacts.db")
        self.contacts.insert_csv_into_db("./input/contacts.csv")

    def operations_constructor(self):
        """
        Operations for converting the csv input files into 
        """
        self.operations = Operations(self.listing, self.contacts)

        self.operations.average_listing_selling_price()
        self.operations.percentile_distribution()
        self.operations.average_price_thirty_percent()
        self.operations.top_five_contacted_listings_per_month()
        self.operations.output_operations_to_csv()
예제 #3
0
class TestAveragePriceThirtyPercent(unittest.TestCase):
    def setUp(self):
        directory = './unittests/output'
        if os.path.exists(directory):
            shutil.rmtree(directory)
        os.makedirs(directory)

        self.listing_db = ListingDataBase("./unittests/output/listings.db")
        self.listing_db.insert_csv_into_db("./unittests/input/listings.csv")

        self.contacts_db = ContactsDataBase("./unittests/output/contacts.db")
        self.contacts_db.insert_csv_into_db("./unittests/input/contacts.csv")

    def test_find_top_percentile(self):
        """
        Checks if the average is calculated correctly
        """
        average_price_thirty_percent = AveragePriceThirtyPercent(
            self.contacts_db, self.listing_db)
        top_percentile = average_price_thirty_percent.find_top_percentile(30 /
                                                                          100)

        self.assertEqual(top_percentile[0], [1276, 14])
        self.assertEqual(top_percentile[1], [1038, 6])
        self.assertEqual(top_percentile[2], [1288, 1])
        self.assertEqual(top_percentile[3], [1263, 1])
        self.assertEqual(top_percentile[4], [1257, 1])
        self.assertEqual(top_percentile[5], [1244, 1])
class TestPercentileDistributionOfCars(unittest.TestCase):
    def setUp(self):
        directory = './unittests/output'
        if os.path.exists(directory):
            shutil.rmtree(directory)
        os.makedirs(directory)

        self.listing_db = ListingDataBase("./unittests/output/listings.db")
        self.listing_db.insert_csv_into_db("./unittests/input/listings.csv")

    def test_percentile_distribution(self):
        """
        Checks if the average is calculated correctly
        """
        percentile_distribution_of_cars = PercentileDistributionOfCars(
            self.listing_db)
        percentile = percentile_distribution_of_cars.percentile_distribution(
            "Mazda")

        self.assertEqual(percentile, 30)

    def test_generate_dict_percentile_distribution(self):
        """
        Checks if the average is calculated correctly
        """
        percentile_distribution_of_cars = PercentileDistributionOfCars(
            self.listing_db)
        percentile = percentile_distribution_of_cars.generate_dict_percentile_distribution(
        )

        self.assertEqual(percentile["Mazda"], 30)
        self.assertEqual(percentile["Audi"], 60)
        self.assertEqual(percentile["BWM"], 10)
예제 #5
0
    def setUp(self):
        directory = './unittests/output'
        if os.path.exists(directory):
            shutil.rmtree(directory)
        os.makedirs(directory)

        self.listing_db = ListingDataBase("./unittests/output/listings.db")
        self.listing_db.insert_csv_into_db("./unittests/input/listings.csv")
예제 #6
0
    def databases_constructor(self):
        """
        Operations for converting the csv input files into database
        """
        self.listing = ListingDataBase("./output/listings.db")
        self.listing.insert_csv_into_db("./input/listings.csv")

        self.contacts = ContactsDataBase("./output/contacts.db")
        self.contacts.insert_csv_into_db("./input/contacts.csv")
예제 #7
0
class TestDataBase(unittest.TestCase):
    def setUp(self):
        directory = './unittests/output'
        if os.path.exists(directory):
            shutil.rmtree(directory)
        os.makedirs(directory)

        self.listing_db = ListingDataBase("./unittests/output/listings.db")
        self.listing_db.insert_csv_into_db("./unittests/input/listings.csv")

        self.contacts_db = ContactsDataBase("./unittests/output/contacts.db")
        self.contacts_db.insert_csv_into_db("./unittests/input/contacts.csv")

    def test_insert_csv_into_db_listings_db_and_quer_column(self):
        """
        Checks if first three rows in the database are correct
        """
        all_column_make = self.listing_db.quer_column("make", "Listings")
        all_column_list_make = [all_column_make[0] for all_column_make in all_column_make]

        self.assertEqual(all_column_list_make[0], "Audi")
        self.assertEqual(all_column_list_make[1], "Mazda")
        self.assertEqual(all_column_list_make[2], "BWM")

        all_column_price = self.listing_db.quer_column("price", "Listings")
        all_column_list_price = [all_column_price[0] for all_column_price in all_column_price]

        self.assertEqual(all_column_list_price[0], 49717.0)
        self.assertEqual(all_column_list_price[1], 22031.0)
        self.assertEqual(all_column_list_price[2], 17742.0)

        all_column_mileage = self.listing_db.quer_column("mileage", "Listings")
        all_column_list_mileage= [all_column_mileage[0] for all_column_mileage in all_column_mileage]

        self.assertEqual(all_column_list_mileage[0], 6500.0)
        self.assertEqual(all_column_list_mileage[1], 7000.0)
        self.assertEqual(all_column_list_mileage[2], 6000.0)

        all_column_seller_type = self.listing_db.quer_column("seller_type", "Listings")
        all_column_list_seller_type = [all_column_seller_type[0] for all_column_seller_type in all_column_seller_type]

        self.assertEqual(all_column_list_seller_type[0], 'private')
        self.assertEqual(all_column_list_seller_type[1], 'private')
        self.assertEqual(all_column_list_seller_type[2], 'dealer')

    def test_insert_csv_into_db_contacts_db_and_quer_column(self):
        """
        Checks if first three rows in the database are correct
        """
        all_column_make = self.contacts_db.quer_column("listing_id", "Contacts")
        all_column_list_make = [all_column_make[0] for all_column_make in all_column_make]

        self.assertEqual(all_column_list_make[0], 1244)
        self.assertEqual(all_column_list_make[1], 1085)
        self.assertEqual(all_column_list_make[2], 1288)

        all_column_make = self.contacts_db.quer_column("contact_date", "Contacts")
        all_column_list_make = [all_column_make[0] for all_column_make in all_column_make]

        self.assertEqual(all_column_list_make[0], "2020-06")
        self.assertEqual(all_column_list_make[1], "2020-02")
        self.assertEqual(all_column_list_make[2], "2020-01")

    def test_quer_component_using_column(self):
        """
        Checks if the components of a column based on 
        another components of a columns is correct
        """
        all_column = self.listing_db.quer_component_using_column("make", "seller_type", "Listings", "other")
        all_column_list = [all_column[0] for all_column in all_column]

        self.assertEqual(all_column_list[0], "Mazda")
        self.assertEqual(all_column_list[1], "Mazda")

    def test_quer_distinct_components(self):
        """
        Checks if the selected components of a column 
        includes all distinct components
        """
        distinct_components = self.listing_db.quer_distinct_components("make", "Listings")

        self.assertEqual(distinct_components[0], "Audi")
        self.assertEqual(distinct_components[1], "Mazda")
        self.assertEqual(distinct_components[2], "BWM")

    def test_quer_number_of_rows_for_column(self):
        """
        Checks if the quered total number of rows 
        for a specified column is correct
        """
        total_number_of_rows = self.listing_db.quer_number_of_rows_for_column("make", "Listings")

        self.assertEqual(total_number_of_rows, 10)

    def test_quer_list_of_duplicates(self):
        """
        Checks if the quered number of duplicates is correct
        """
        duplicates = self.listing_db.quer_list_of_duplicates("make", "Listings")

        self.assertEqual(duplicates[0], ['Audi', 6])
        self.assertEqual(duplicates[1], ['Mazda', 3])
        self.assertEqual(duplicates[2], ['BWM', 1])