Skip to content

Commit c7f60d8

Browse files
committed
Fixed a bug how finished how increments completions.
When the test is not reset after its been completed i.e. the user will always see the alternative they started with, `finished` was incrementing the completion count of the alternative even if the user had finished the test before. This lead to situations where altenative's completion count was bigger its participant count.
1 parent 7b46d20 commit c7f60d8

File tree

4 files changed

+28
-4
lines changed

4 files changed

+28
-4
lines changed

CHANGES.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ Changelog
33

44
Here you can see the full list of changes between each Flask-Split release.
55

6+
0.1.3 (2012-05-30)
7+
^^^^^^^^^^^^^^^^^^
8+
9+
- Fixed :func:`finished` incrementing alternative's completion count multiple
10+
times, when the test is not reset after it has been finished.
11+
612
0.1.2 (2012-03-15)
713
^^^^^^^^^^^^^^^^^^
814

flask_split/core.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,15 @@ def finished(experiment_name, reset=True):
120120
return
121121
alternative_name = _get_session().get(experiment.key)
122122
if alternative_name:
123-
alternative = Alternative(alternative_name, experiment_name)
124-
alternative.increment_completion()
123+
if '%s:finished' % experiment.key not in _get_session():
124+
alternative = Alternative(alternative_name, experiment_name)
125+
alternative.increment_completion()
125126
if reset:
126127
_get_session().pop(experiment.key, None)
128+
_get_session().pop('%s:finished' % experiment.key, None)
129+
session.modified = True
130+
else:
131+
_get_session()['%s:finished' % experiment.key] = 1
127132
session.modified = True
128133
except ConnectionError:
129134
if not current_app.config['SPLIT_DB_FAILOVER']:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def run(self):
1818

1919
setup(
2020
name='Flask-Split',
21-
version='0.1.2',
21+
version='0.1.3',
2222
url='http://github.com/jpvanhal/flask-split',
2323
license='MIT',
2424
author='Janne Vanhala',

tests/test_extension.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,25 @@ def test_finished_does_not_clear_out_the_users_session_if_reset_is_false(self):
117117

118118
assert session['split'] == {"link_color": alternative_name}
119119
finished('link_color', reset=False)
120-
assert session['split'] == {"link_color": alternative_name}
120+
assert session['split'] == {
121+
"link_color": alternative_name,
122+
"link_color:finished": 1
123+
}
121124

122125
def test_finished_does_nothing_if_experiment_was_not_started_by_the_user(self):
123126
session['split'] = None
124127
finished('some_experiment_not_started_by_the_user')
125128

129+
def test_finished_does_not_incr_completed_twice_if_reset_is_false(self):
130+
Experiment.find_or_create('link_color', 'blue', 'red')
131+
alternative_name = ab_test('link_color', 'blue', 'red')
132+
133+
finished('link_color', reset=False)
134+
finished('link_color', reset=False)
135+
136+
completion_count = Alternative(alternative_name, 'link_color').completed_count
137+
assert completion_count == 1
138+
126139
def test_conversions_return_conversion_rates_for_alternatives(self):
127140
Experiment.find_or_create('link_color', 'blue', 'red')
128141
alternative_name = ab_test('link_color', 'blue', 'red')

0 commit comments

Comments
 (0)