def test_max_similarity(): """Tests that the maximum similarity is properly returned.""" submission = SubmissionFactory.build( similarity=0, mt_similarity=0, ) assert submission.max_similarity == 0 submission = SubmissionFactory.build( similarity=0.5, mt_similarity=0.6, ) assert submission.max_similarity == 0.6 submission = SubmissionFactory.build( similarity=0.5, mt_similarity=None, ) assert submission.max_similarity == 0.5 submission = SubmissionFactory.build( similarity=None, mt_similarity=None, ) assert submission.max_similarity == 0
def test_needs_scorelog(): """Tests if the submission needs to be logged or not.""" # Changing the STATE from UNTRANSLATED won't record any logs submission = SubmissionFactory.build( field=SubmissionFields.STATE, type=SubmissionTypes.NORMAL, old_value=UNTRANSLATED, new_value=TRANSLATED, ) assert not submission.needs_scorelog() # Changing other fields (or even STATE, in a different direction) should # need to record a score log submission = SubmissionFactory.build( field=SubmissionFields.STATE, type=SubmissionTypes.NORMAL, old_value=TRANSLATED, new_value=UNTRANSLATED, ) assert submission.needs_scorelog() submission = SubmissionFactory.build( field=SubmissionFields.TARGET, type=SubmissionTypes.SUGG_ADD, old_value=u'', new_value=u'', ) assert submission.needs_scorelog()
def test_invoice_get_rates_inconsistent_scorelog_rates(member, store0): USER_RATE_ONE = 0.5 USER_RATE_TWO = 0.2 # Set some rate member.rate = USER_RATE_ONE member.review_rate = USER_RATE_ONE member.save() month = timezone.datetime(2014, 04, 01) submission_kwargs = { 'store': store0, 'unit': store0.units[0], 'field': SubmissionFields.TARGET, 'type': SubmissionTypes.NORMAL, 'old_value': 'foo', 'new_value': 'bar', 'submitter': member, 'translation_project': store0.translation_project, 'creation_time': month, } scorelog_kwargs = { 'wordcount': 1, 'similarity': 0, 'action_code': TranslationActionCodes.NEW, 'creation_time': month, 'user': member, 'submission': SubmissionFactory(**submission_kwargs), } ScoreLogFactory(**scorelog_kwargs) # Alter rates, producing an inconsistent state when recording the ScoreLog member.rate = USER_RATE_TWO member.review_rate = USER_RATE_TWO member.save() submission_kwargs['unit'] = store0.units[1] scorelog_kwargs['submission'] = SubmissionFactory(**submission_kwargs) ScoreLogFactory(**scorelog_kwargs) invoice = Invoice(member, FAKE_CONFIG, month=month) with pytest.raises(ValueError) as e: invoice.get_rates() assert ( 'Multiple rate values recorded for user %s' % (member.username, ) in e.value.message )
def test_is_similarity_taken_from_mt(similarity, mt_similarity): submission = SubmissionFactory.build(similarity=similarity, mt_similarity=mt_similarity) score_log = ScoreLogFactory.build(submission=submission) if submission.similarity < submission.mt_similarity: assert score_log.is_similarity_taken_from_mt() else: assert not score_log.is_similarity_taken_from_mt()
def test_invoice_get_rates_inconsistent_paidtask_rates(member, task_type, task_type_name, user_rate_attr_name, store0): USER_RATE = 0.5 PAID_TASK_RATE = 0.2 # Set some user rate setattr(member, user_rate_attr_name, USER_RATE) member.save() month = timezone.datetime(2014, 04, 01) submission_kwargs = { 'store': store0, 'unit': store0.units[0], 'field': SubmissionFields.TARGET, 'type': SubmissionTypes.NORMAL, 'old_value': 'foo', 'new_value': 'bar', 'submitter': member, 'translation_project': store0.translation_project, 'creation_time': month, } scorelog_kwargs = { 'wordcount': 1, 'similarity': 0, 'action_code': TranslationActionCodes.NEW, 'creation_time': month, 'user': member, 'submission': SubmissionFactory(**submission_kwargs), } paid_task_kwargs = { 'rate': PAID_TASK_RATE, # Note how this doesn't match user's rate 'datetime': month, 'user': member, 'task_type': task_type, } ScoreLogFactory(**scorelog_kwargs) PaidTaskFactory(**paid_task_kwargs) invoice = Invoice(member, FAKE_CONFIG, month=month) with pytest.raises(ValueError) as e: invoice.get_rates() assert ( 'Multiple %s rate values for user %s' % (task_type_name, member.username) in e.value.message )
def test_record_submission(member, submission_type, store0): store = store0 unit = store.units.first() submission_params = { 'store': store, 'unit': unit, 'field': SubmissionFields.TARGET, 'type': submission_type, 'old_value': unit.target, 'new_value': 'New target', 'submitter': member, 'translation_project': store.translation_project, } sub = SubmissionFactory(**submission_params) assert ScoreLog.objects.filter(submission=sub).count() == 1
def test_invoice_get_rates_scorelog_rates(member, task_type, task_type_name, user_rate_attr_name, store0): """Tests that `Invoice.get_rates()` returns the rates set for users in their `ScoreLog` entries. """ USER_RATE_ONE = 0.5 USER_RATE_TWO = 0.2 # Set some user rate setattr(member, user_rate_attr_name, USER_RATE_ONE) member.save() month = timezone.datetime(2014, 04, 01) submission_kwargs = { 'store': store0, 'unit': store0.units[0], 'field': SubmissionFields.TARGET, 'type': SubmissionTypes.NORMAL, 'old_value': 'foo', 'new_value': 'bar', 'submitter': member, 'translation_project': store0.translation_project, 'creation_time': month, } scorelog_kwargs = { 'wordcount': 1, 'similarity': 0, 'action_code': TranslationActionCodes.NEW, 'creation_time': month, 'user': member, 'submission': SubmissionFactory(**submission_kwargs), } ScoreLogFactory(**scorelog_kwargs) invoice = Invoice(member, FAKE_CONFIG, month=month) # Set user rate to something else to ensure we get the recorded rates setattr(member, user_rate_attr_name, USER_RATE_TWO) member.save() rate, review_rate, hourly_rate = invoice.get_rates() assert locals()[user_rate_attr_name] == USER_RATE_ONE
def test_record_submission(member, submission_type): from pootle_store.models import Store store = Store.objects.first() unit = store.units.first() submission_params = { 'store': store, 'unit': unit, 'field': SubmissionFields.TARGET, 'type': submission_type, 'old_value': unit.target, 'new_value': 'New target', 'similarity': 0, 'mt_similarity': 0, 'submitter': member, 'translation_project': store.translation_project, 'creation_time': datetime.now(), } sub = SubmissionFactory(**submission_params) assert ScoreLog.objects.filter(submission=sub).count() == 1