예제 #1
0
    def test_block_1_payments_day_8(self):
        '''
        test that block 2 payments are calculated correctly
        '''

        logger = logging.getLogger(__name__)

        session = self.session

        session.start_date = todaysDate() - timedelta(days=7)

        session.calcEndDate()
        session = Session.objects.get(id=session.id)

        r = json.loads(startSession({}, session.id).content.decode("UTF-8"))
        self.assertEqual(r['status'], "success")
        session = Session.objects.get(id=session.id)

        start_sleep = 0.2
        start_heart = 0.1

        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.all(
            ).order_by('session_day__period_number'):
                activity.heart_activity = start_heart
                activity.immune_activity = start_sleep

                activity.paypal_today = True
                activity.save()

                start_heart += 0.01
                start_sleep += 0.01

            start_sleep = 0.2
            start_heart = 0.1

        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.all(
            ).order_by('session_day__period_number'):
                logger.info(
                    f"period {activity.session_day.period_number}, subject {activity.session_subject.id}, heart score {activity.heart_activity}, sleep score {activity.immune_activity}, pay pal today {activity.paypal_today}"
                )

        results = do_calc_a_b_c_treatments()

        #logger.info(results)
        for result in results["A B C Lumpsum Calculations"]:
            for payment in result['payments']:
                self.assertEqual(
                    payment['payment'],
                    round_half_away_from_zero(3 * (3 + 8 * .15 + 8 * .25), 2))

        #check for none payment everywhere else
        #check for correct payment on last block
        for session_subject in self.session.session_subjects.all():
            activity = session_subject.Session_day_subject_actvities.get(
                session_day__period_number=7)
            self.assertEqual(
                float(activity.payment_today),
                round_half_away_from_zero(3 * (3 + 8 * .15 + 8 * .25), 2))
예제 #2
0
    def test_block_1_payments_day_5_missed_day(self):
        '''
        test that block 1 payments are calculated correctly
        '''

        logger = logging.getLogger(__name__)

        session = self.session

        session.start_date = todaysDate() - timedelta(days=4)
        logger.info(
            f'test_block_1_payments_day_5 start date {session.start_date}')

        session.calcEndDate()
        session = Session.objects.get(id=session.id)

        r = json.loads(startSession({}, session.id).content.decode("UTF-8"))
        self.assertEqual(r['status'], "success")
        session = Session.objects.get(id=session.id)

        start_sleep = 0.2
        start_heart = 0.1

        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.all(
            ).order_by('session_day__period_number'):
                activity.heart_activity = start_heart
                activity.immune_activity = start_sleep

                start_heart += 0.01
                start_sleep += 0.01

                activity.paypal_today = True
                activity.save()

        for session_subject in self.session.session_subjects.all():
            activity = session_subject.Session_day_subject_actvities.get(
                session_day__period_number=2)
            activity.paypal_today = False
            activity.save()

        results = do_calc_a_b_c_treatments()

        for result in results["A B C Lumpsum Calculations"]:
            for payment in result['payments']:
                self.assertEqual(payment['payment'], 9)

        #check for correct payment on last block
        for session_subject in self.session.session_subjects.all():
            activity = session_subject.Session_day_subject_actvities.get(
                session_day__period_number=4)
            self.assertEqual(activity.payment_today, 9)

        #check for none payment everywhere else
        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.exclude(
                    session_day__period_number=4):
                self.assertEqual(activity.payment_today, 0)
예제 #3
0
    def setUp(self):
        logger = logging.getLogger(__name__)

        createSession({})

        #set sessoin start to tomorrow
        session = Session.objects.first()

        start_date = todaysDate()

        session.parameterset.block_1_day_count = 3
        session.parameterset.block_2_day_count = 3
        session.parameterset.block_3_day_count = 5

        session.parameterset.save()
        session.calcEndDate()
        session = Session.objects.get(id = session.id)

        data = {'action': 'updateSession', 'formData': [{'name': 'title', 'value': '*** New Session ***'}, {'name': 'start_date', 'value': start_date.date().strftime("%m/%d/%Y")}, {'name': 'treatment', 'value': 'A'}, {'name': 'consent_required', 'value': '1'}, {'name': 'questionnaire1_required', 'value': '1'}, {'name': 'questionnaire2_required', 'value': '1'},{'name': 'instruction_set', 'value': '1'},{'name':'auto_pay','value':'1'}]}

        r = json.loads(updateSession(data,session.id).content.decode("UTF-8"))
        self.assertEqual(r['status'],"success")

        session = Session.objects.first()
        logger.info(f"Session start date {session.start_date} end date {session.end_date}")

        addSubject({},session.id)
        addSubject({},session.id)
        addSubject({},session.id)
        addSubject({},session.id)
        addSubject({},session.id)
        addSubject({},session.id)

        r = json.loads(startSession({},session.id).content.decode("UTF-8"))
        self.assertEqual(r['status'],"success")

        session = Session.objects.first()
        self.session = session

        Session_day_subject_actvity.objects.filter(session_day__session = session).update(fitbit_on_wrist_minutes = session.parameterset.minimum_wrist_minutes)
        
        #store synced today
        for subject in session.session_subjects.all():
            subject.fitBitLastSynced = todaysDate()
            subject.save()
예제 #4
0
    def test_block_1_payments_day_1(self):
        '''
        test that block 1 payments are calculated correctly
        '''

        #logger = logging.getLogger(__name__)

        session = self.session

        r = json.loads(startSession({}, session.id).content.decode("UTF-8"))
        self.assertEqual(r['status'], "success")
        session = Session.objects.get(id=session.id)

        start_sleep = 0.2
        start_heart = 0.1

        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.all(
            ).order_by('session_day__period_number'):
                activity.heart_activity = start_heart
                activity.immune_activity = start_sleep

                start_heart += 0.01
                start_sleep += 0.01

                activity.paypal_today = True
                activity.save()

        results = do_calc_a_b_c_treatments()

        for result in results["A B C Lumpsum Calculations"]:
            self.assertEqual(result['payments'], [])

        #check for none payment everywhere else
        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.all(
            ):
                self.assertEqual(activity.payment_today, 0)
예제 #5
0
    def test_c_payments_8_missed_day(self):
        '''
        test treatment c payments
        '''

        logger = logging.getLogger(__name__)

        session = self.session

        start_date = todaysDate() - timedelta(days=7)

        data = {
            'action':
            'updateSession',
            'formData': [{
                'name': 'title',
                'value': '*** New Session ***'
            }, {
                'name': 'start_date',
                'value': start_date.date().strftime("%m/%d/%Y")
            }, {
                'name': 'treatment',
                'value': 'C'
            }, {
                'name': 'consent_required',
                'value': '1'
            }, {
                'name': 'questionnaire1_required',
                'value': '1'
            }, {
                'name': 'questionnaire2_required',
                'value': '1'
            }, {
                'name': 'instruction_set',
                'value': '1'
            }, {
                'name': 'auto_pay',
                'value': '1'
            }]
        }

        r = json.loads(updateSession(data, session.id).content.decode("UTF-8"))
        self.assertEqual(r['status'], "success")

        r = json.loads(startSession({}, session.id).content.decode("UTF-8"))
        self.assertEqual(r['status'], "success")
        session = Session.objects.get(id=session.id)

        session.parameterset.block_2_fixed_pay_per_day = 0
        session.parameterset.save()

        start_sleep = 0.2
        start_heart = 0.1

        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.all(
            ).order_by('session_day__period_number'):
                activity.heart_activity = start_heart
                activity.immune_activity = start_sleep

                activity.paypal_today = True
                activity.save()

                start_heart += 0.01
                start_sleep += 0.01

            start_sleep = 0.2
            start_heart = 0.1

        for session_subject in self.session.session_subjects.all():
            activity = session_subject.Session_day_subject_actvities.get(
                session_day__period_number=5)
            activity.paypal_today = False
            activity.save()

        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.all(
            ).order_by('session_day__period_number'):
                logger.info(
                    f"period {activity.session_day.period_number}, subject {activity.session_subject.id}, heart score {activity.heart_activity}, sleep score {activity.immune_activity}, pay pal today {activity.paypal_today}"
                )

        results = do_calc_a_b_c_treatments()

        #logger.info(results)
        for result in results["A B C Lumpsum Calculations"]:
            for payment in result['payments']:
                self.assertEqual(
                    payment['payment'],
                    round_half_away_from_zero(2 * (1.5 * .16 + 2 * .26), 2))

        #check for none payment everywhere else
        #check for correct payment on last block
        for session_subject in self.session.session_subjects.all():
            activity = session_subject.Session_day_subject_actvities.get(
                session_day__period_number=7)
            self.assertEqual(
                float(activity.payment_today),
                round_half_away_from_zero(2 * (1.5 * .16 + 2 * .26), 2))

        #check for zeros
        for session_subject in self.session.session_subjects.all():
            for activity in session_subject.Session_day_subject_actvities.exclude(
                    session_day__period_number=7):
                self.assertEqual(activity.payment_today, 0)
예제 #6
0
    def setUp(self):
        logger = logging.getLogger(__name__)

        createSession({})

        #set sessoin start to tomorrow
        self.session = Session.objects.first()

        start_date = todaysDate() - timedelta(days=1)

        data = {
            'action':
            'updateSession',
            'formData': [{
                'name': 'title',
                'value': '*** New Session ***'
            }, {
                'name': 'start_date',
                'value': start_date.date().strftime("%m/%d/%Y")
            }, {
                'name': 'treatment',
                'value': 'I'
            }, {
                'name': 'consent_required',
                'value': '1'
            }, {
                'name': 'questionnaire1_required',
                'value': '1'
            }, {
                'name': 'questionnaire2_required',
                'value': '1'
            }, {
                'name': 'instruction_set',
                'value': '2'
            }, {
                'name': 'auto_pay',
                'value': '1'
            }]
        }

        result = json.loads(
            updateSession(data, self.session.id).content.decode("UTF-8"))
        self.assertEqual(result['status'], "success")

        addSubject({}, self.session.id)
        addSubject({}, self.session.id)

        self.session = Session.objects.get(id=self.session.id)
        self.session.parameterset.block_1_fixed_pay_per_day = 3
        self.session.parameterset.block_2_fixed_pay_per_day = 4
        self.session.parameterset.block_3_fixed_pay_per_day = 5
        self.session.parameterset.save()

        r = json.loads(
            startSession({}, self.session.id).content.decode("UTF-8"))
        self.assertEqual(r['status'], "success")

        self.session = Session.objects.first()
        logger.info(
            f"Session start date {self.session.start_date} end date {self.session.end_date}"
        )

        #store synced today
        for subject in self.session.session_subjects.all():
            subject.fitBitLastSynced = todaysDate()
            subject.save()