From 207c2e89936f734ae7af7346d086d678400a8172 Mon Sep 17 00:00:00 2001 From: Ilya Shakhat Date: Thu, 2 Apr 2015 13:06:21 +0300 Subject: [PATCH] Set user as independent if profile contains no info If user profile contains only closed intervals for affiliation then mark user as independent when the last interval ends Change-Id: I57e452108390e9c062527710d085c2f49a1f79fb --- stackalytics/processor/normalizer.py | 4 ++++ tests/unit/test_data.py | 9 +++++++++ tests/unit/test_default_data_processor.py | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/stackalytics/processor/normalizer.py b/stackalytics/processor/normalizer.py index edabe66d4..1e58a1d03 100644 --- a/stackalytics/processor/normalizer.py +++ b/stackalytics/processor/normalizer.py @@ -37,6 +37,10 @@ def _normalize_user(user): return x["end_date"] - y["end_date"] user['companies'].sort(key=utils.cmp_to_key(end_date_comparator)) + if user['companies']: + if user['companies'][-1]['end_date'] != 0: + user['companies'].append(dict(company_name='*independent', + end_date=0)) user['user_id'] = user_processor.make_user_id( launchpad_id=user.get('launchpad_id'), emails=user.get('emails'), diff --git a/tests/unit/test_data.py b/tests/unit/test_data.py index cb3c665e3..355e15da9 100644 --- a/tests/unit/test_data.py +++ b/tests/unit/test_data.py @@ -25,6 +25,15 @@ DEFAULT_DATA = { {'company_name': 'NEC', 'end_date': None}, ] }, + { + 'launchpad_id': 'smith', + 'user_name': 'Smith', + 'emails': ['smith@gmail.com', 'smith@nec.com'], + 'companies': [ + {'company_name': 'IBM', 'end_date': '2013-May-01'}, + {'company_name': 'NEC', 'end_date': '2014-Jun-01'} + ] + }, { 'launchpad_id': 'ivan_ivanov', 'user_name': 'Ivan Ivanov', diff --git a/tests/unit/test_default_data_processor.py b/tests/unit/test_default_data_processor.py index 021c30724..4c4a0e371 100644 --- a/tests/unit/test_default_data_processor.py +++ b/tests/unit/test_default_data_processor.py @@ -52,6 +52,11 @@ class TestDefaultDataProcessor(testtools.TestCase): data['users'][0]['user_id'], message='User id should be set') + # verify that *independent company is added automatically + self.assertEqual(3, len(data['users'][1]['companies'])) + self.assertEqual(0, data['users'][1]['companies'][-1]['end_date'], + message='The last company end date should be 0') + def test_update_project_list(self): with mock.patch('stackalytics.processor.default_data_processor.' '_retrieve_project_list_from_gerrit') as retriever: