コード例 #1
0
def test_save_many_projects_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, 10))
    project.add_downloads(datetime.date(2020, 3, 31), "2.0.1",
                          DayDownloads(30, 10))
    project.add_downloads(datetime.date(2020, 4, 1), "2.0",
                          DayDownloads(20, 10))
    repository.save_projects([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_retrieve_project_with_old_format(mongo_client: MongoClient,
                                          repository: ProjectRepository):
    data = {
        "name": "climoji",
        "total_downloads": 1100,
        "downloads": {
            "2020-04-01": [["2.0", 30]],
            "2020-04-02": [["2.0", 10]],
            "2020-03-31": [["2.0", 40]],
            "2020-04-03": [["2.0", 30]],
        },
    }
    query = {"name": "climoji"}
    mongo_client.pepy_test.projects.replace_one(query, data, upsert=True)

    result = repository.get("climoji")
    assert ProjectName("climoji") == result.name
    assert datetime.date(2020, 3, 31) == result.min_date
    assert Downloads(1100) == result.total_downloads
    expected_last_downloads = [
        ProjectVersionDownloads(datetime.date(2020, 3, 31), "2.0",
                                Downloads(40)),
        ProjectVersionDownloads(datetime.date(2020, 4, 1), "2.0",
                                Downloads(30)),
        ProjectVersionDownloads(datetime.date(2020, 4, 2), "2.0",
                                Downloads(10)),
        ProjectVersionDownloads(datetime.date(2020, 4, 3), "2.0",
                                Downloads(30)),
    ]
    assert expected_last_downloads == result.last_downloads()
コード例 #3
0
def test_retrieve_project_with_new_format(mongo_client: MongoClient,
                                          repository: ProjectRepository):
    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
            }]
        }),
        InsertOne({
            "project": "climoji",
            "date": "2020-04-02",
            "downloads": [{
                "version": "2.0",
                "downloads": 10
            }]
        }),
        InsertOne({
            "project": "climoji",
            "date": "2020-03-31",
            "downloads": [{
                "version": "2.0",
                "downloads": 40
            }]
        }),
        InsertOne({
            "project": "climoji",
            "date": "2020-04-03",
            "downloads": [{
                "version": "2.0",
                "downloads": 30
            }]
        }),
    ]
    mongo_client.pepy_test.project_downloads.bulk_write(downloads_data)

    result = repository.get("climoji")
    assert ProjectName("climoji") == result.name
    assert datetime.date(2020, 3, 31) == result.min_date
    assert Downloads(1100) == result.total_downloads
    expected_last_downloads = [
        ProjectVersionDownloads(datetime.date(2020, 3, 31), "2.0",
                                Downloads(40)),
        ProjectVersionDownloads(datetime.date(2020, 4, 1), "2.0",
                                Downloads(30)),
        ProjectVersionDownloads(datetime.date(2020, 4, 2), "2.0",
                                Downloads(10)),
        ProjectVersionDownloads(datetime.date(2020, 4, 3), "2.0",
                                Downloads(30)),
    ]
    assert expected_last_downloads == result.last_downloads()
コード例 #4
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]