예제 #1
0
def test_save_project_with_new_format(mongo_client: MongoClient,
                                      repository: ProjectRepository):
    project = Project(ProjectName("climoji"), Downloads(100))
    project.add_downloads(datetime.date(2020, 3, 31), "2.0",
                          DayDownloads(40, 40))
    project.add_downloads(datetime.date(2020, 3, 31), "2.0.1",
                          DayDownloads(30, 30))
    project.add_downloads(datetime.date(2020, 4, 1), "2.0",
                          DayDownloads(20, 20))
    repository.save(project)

    data = mongo_client.pepy_test.projects.find_one(
        {"name": project.name.name})
    expected_data = {
        "name": "climoji",
        "total_downloads": 190,
        "monthly_downloads": 0
    }
    for key, value in expected_data.items():
        assert key in data
        assert value == data[key]
    downloads_data = sorted(mongo_client.pepy_test.project_downloads.find(
        {"project": project.name.name}),
                            key=lambda x: x["date"])
    expected_downloads_data = [
        {
            "project":
            "climoji",
            "date":
            "2020-03-31",
            "downloads": [{
                "version": "2.0",
                "downloads": 40
            }, {
                "version": "2.0.1",
                "downloads": 30
            }],
        },
        {
            "project": "climoji",
            "date": "2020-04-01",
            "downloads": [{
                "version": "2.0",
                "downloads": 20
            }]
        },
    ]
    assert len(expected_downloads_data) == len(downloads_data)
    for i in range(len(expected_downloads_data)):
        for key, value in expected_downloads_data[i].items():
            assert key in downloads_data[i]
            assert value == downloads_data[i][key]
예제 #2
0
def test_do_not_touch_already_saved_data(mongo_client: MongoClient,
                                         repository: ProjectRepository):
    # Used for performance reasons
    data = {
        "name": "climoji",
        "total_downloads": 1100,
    }
    query = {"name": "climoji"}
    mongo_client.pepy_test.projects.replace_one(query, data, upsert=True)
    downloads_data = [
        InsertOne({
            "project": "climoji",
            "date": "2020-04-01",
            "downloads": [{
                "version": "2.0",
                "downloads": 30
            }]
        }),
    ]
    mongo_client.pepy_test.project_downloads.bulk_write(downloads_data)

    project = repository.get("climoji")
    project.add_downloads(datetime.date(2020, 4, 1), "2.0", DayDownloads(1, 1))
    repository.save(project)
    downloads_data = sorted(mongo_client.pepy_test.project_downloads.find(
        {"project": project.name.name}),
                            key=lambda x: x["date"])
    expected_downloads_data = [{
        "project":
        "climoji",
        "date":
        "2020-04-01",
        "downloads": [{
            "version": "2.0",
            "downloads": 30
        }]
    }]
    assert len(expected_downloads_data) == len(downloads_data)
    for i in range(len(expected_downloads_data)):
        for key, value in expected_downloads_data[i].items():
            assert key in downloads_data[i]
            assert value == downloads_data[i][key]