def test_it_returns_percentage_increase_for_each_country(self):
        country_summary = CountrySummary()
        country_summary.total_confirmed = 110
        country_summary.new_confirmed = 10

        repo = TupleCovidRepository((country_summary,))
        analyzer = RatioAnalyzer(repo)

        self.assertEqual((0.1,), tuple(analyzer.get_new_confirmed_ratio()))
예제 #2
0
    def load(self):
        """
        loads data from the repository

        Returns
        -------
        list of CountrySummary
        """
        con = sqlite3.connect(self.filename)
        cursor = con.cursor()

        query = f"SELECT * from {self.table_name}"

        country_summaries = []

        for row in cursor.execute(query):
            country_summary = CountrySummary()
            country_summary.name = row[0]
            country_summary.new_confirmed = int(row[1])
            country_summary.total_confirmed = int(row[2])
            country_summary.new_deaths = int(row[3])
            country_summary.total_deaths = int(row[4])
            country_summary.new_recovered = int(row[5])
            country_summary.total_recovered = int(row[6])
            country_summaries += (country_summary, )

        return country_summaries
    def test_it_can_return_filter_by_new_confirmed_threshold_reversed(self):
        first_country_summary = CountrySummary()
        first_country_summary.new_confirmed = 10
        first_country_summary.total_recovered = 1
        second_country_summary = CountrySummary()
        second_country_summary.new_confirmed = 9
        second_country_summary.total_recovered = 2

        country_summaries = (first_country_summary, second_country_summary)

        filter_new_confirmed = FilterByThreshold(field="new_confirmed",
                                                 threshold=9,
                                                 reversed=True)

        filtered_summaries = filter_new_confirmed.apply_to(country_summaries)

        self.assertEqual(1, len(filtered_summaries))
        self.assertIs(second_country_summary, filtered_summaries[0])

        filter_total_recovered = FilterByThreshold(field="total_recovered",
                                                   threshold=1,
                                                   reversed=True)

        filtered_summaries = filter_total_recovered.apply_to(country_summaries)

        self.assertEqual(1, len(filtered_summaries))
        self.assertIs(first_country_summary, filtered_summaries[0])
예제 #4
0
    def test_it_can_be_converted_to_flat_dict(self):
        summary = CountrySummary()
        summary.name = "test"
        summary.new_deaths = 100
        summary.total_deaths = 1000
        summary.new_confirmed = 200
        summary.total_confirmed = 2000
        summary.new_recovered = 300
        summary.total_recovered = 3000

        self.assertEqual(
            {
                "name": "test",
                "new_deaths": 100,
                "total_deaths": 1000,
                "new_confirmed": 200,
                "total_confirmed": 2000,
                "new_recovered": 300,
                "total_recovered": 3000,
            },
            summary.to_dict(),
        )
    def test_it_saves_to_db(self):
        first_country = CountrySummary()
        first_country.name = "aa"
        first_country.new_confirmed = 100
        second_country = CountrySummary()
        second_country.name = "bb"
        second_country.new_deaths = 150

        country_summaries = [first_country, second_country]

        repository = SqliteCovidRepository(filename=self.dbfilename)
        repository.save(country_summaries)

        loaded_data = repository.load()

        self.assertEqual(loaded_data, country_summaries)
    def test_it_creates_db_if_not_exists(self):
        first_country = CountrySummary()
        first_country.name = "aa"
        first_country.new_confirmed = 100
        second_country = CountrySummary()
        second_country.name = "bb"
        second_country.new_deaths = 150

        country_summaries = [first_country, second_country]

        repository = SqliteCovidRepository(filename=self.dbfilename)
        repository.save(country_summaries)

        self.assertTrue(
            os.path.exists(self.dbfilename)
            and os.path.isfile(self.dbfilename))
    def test_it_can_call_class_by_passing_which_statistics_should_be_generated(self):
        country_summary = CountrySummary()
        country_summary.name = "Italy"
        country_summary.total_confirmed = 110
        country_summary.new_confirmed = 10
        country_summary.total_recovered = 210
        country_summary.new_recovered = 10
        country_summary.total_deaths = 410
        country_summary.new_deaths = 10

        repo = TupleCovidRepository((country_summary,))
        analyzer = RatioAnalyzer(repo)
        self.assertEqual(
            {
                "Italy": {
                    "new_confirmed_ratio": 0.1,
                    "new_recovered_ratio": 0.05,
                    "new_deaths_ratio": 0.025,
                }
            },
            analyzer(
                new_confirmed_ratio=True,
                new_recovered_ratio=True,
                new_deaths_ratio=True,
            ),
        )

        self.assertEqual(
            {"Italy": {"new_recovered_ratio": 0.05, "new_deaths_ratio": 0.025,}},
            analyzer(
                new_confirmed_ratio=False,
                new_recovered_ratio=True,
                new_deaths_ratio=True,
            ),
        )

        self.assertEqual(
            {"Italy": {"new_recovered_ratio": 0.05,}},
            analyzer(new_recovered_ratio=True, new_deaths_ratio=False),
        )
예제 #8
0
    def test_it_saves_to_file(self):
        filename = "file.csv"
        first_country = CountrySummary()
        first_country.name = "aa"
        first_country.new_confirmed = 100
        second_country = CountrySummary()
        second_country.name = "bb"
        second_country.new_deaths = 150

        country_summaries = [first_country, second_country]

        repository = StorageCovidRepository(filename=filename)
        repository.save(country_summaries)

        f = open(filename, "r")
        content = f.read()
        f.close()

        self.assertEqual("aa|100|0|0|0|0|0\nbb|0|0|150|0|0|0", content)
    def load(self):
        """
        loads data from the repository

        Returns
        -------
        list of CountrySummary
        """
        dummy_country_summaries = ()

        for i in range(0, 100):
            country_summary = CountrySummary()
            country_summary.name = self.__randomString(20)
            country_summary.new_confirmed = random.randint(1, 1000)
            country_summary.new_deaths = random.randint(1, 1000)
            country_summary.total_deaths = random.randint(1, 10000) + country_summary.new_deaths
            country_summary.total_confirmed = random.randint(1, 10000) + country_summary.new_confirmed
            country_summary.new_recovered = random.randint(1, 1000)
            country_summary.total_recovered = random.randint(1, 10000) + country_summary.new_recovered

            dummy_country_summaries += (country_summary,)

        return dummy_country_summaries
    def test_it_can_return_filter_by_name_portion(self):
        first_country_summary = CountrySummary()
        first_country_summary.name = "Italy"
        second_country_summary = CountrySummary()
        second_country_summary.name = "U.S.A."

        country_summaries = (first_country_summary, second_country_summary)

        filter = FilterByName(country_name="Italy")

        filtered_summaries = filter.apply_to(country_summaries)

        self.assertEqual(1, len(filtered_summaries))
        self.assertIs(first_country_summary, filtered_summaries[0])
예제 #11
0
    def test_two_country_summaries_can_be_compared_for_equality(self):
        summary1 = CountrySummary()
        summary1.name = "test"
        summary1.new_deaths = 100
        summary1.total_deaths = 1000
        summary1.new_confirmed = 200
        summary1.total_confirmed = 2000
        summary1.new_recovered = 300
        summary1.total_recovered = 3000

        summary2 = CountrySummary()
        summary2.name = "test"
        summary2.new_deaths = 100
        summary2.total_deaths = 1000
        summary2.new_confirmed = 200
        summary2.total_confirmed = 2000
        summary2.new_recovered = 300
        summary2.total_recovered = 3000

        self.assertEqual(summary1, summary2)