from datetime import date, timedelta import pytest from data.database import RepositoryActionCount, RepositorySearchScore from data.model.repository import create_repository from data.model.repositoryactioncount import update_repository_score, SEARCH_BUCKETS from test.fixtures import * @pytest.mark.parametrize('bucket_sums,expected_score', [ ((0, 0, 0, 0), 0), ((1, 6, 24, 152), 100), ((2, 6, 24, 152), 101), ((1, 6, 24, 304), 171), ((100, 480, 24, 152), 703), ((1, 6, 24, 15200), 7131), ((300, 500, 1000, 0), 1733), ((5000, 0, 0, 0), 5434), ]) def test_update_repository_score(bucket_sums, expected_score, initialized_db): # Create a new repository. repo = create_repository('devtable', 'somenewrepo', None, repo_kind='image') # Delete the RAC created in create_repository. RepositoryActionCount.delete().where(RepositoryActionCount.repository == repo).execute() # Add RAC rows for each of the buckets. for index, bucket in enumerate(SEARCH_BUCKETS): for day in range(0, bucket.days): RepositoryActionCount.create(repository=repo, count=(bucket_sums[index] / bucket.days * 1.0), date=date.today() - bucket.delta + timedelta(days=day)) assert update_repository_score(repo) assert RepositorySearchScore.get(repository=repo).score == expected_score