def test_flags_samples_switches(): pancake = FlaskPancake() omlet = FlaskPancake(name="omlet") assert pancake.flags == {} assert omlet.flags == {} assert pancake.samples == {} assert omlet.samples == {} assert pancake.switches == {} assert omlet.switches == {} flag1 = Flag("Flag1", False) flag2 = Flag("Flag2", False, "omlet") sample1 = Sample("Sample1", 42) sample2 = Sample("Sample2", 42, "omlet") switch1 = Switch("Switch1", False) switch2 = Switch("Switch2", False, "omlet") assert pancake.flags == {"Flag1": flag1} assert omlet.flags == {"Flag2": flag2} assert pancake.samples == {"Sample1": sample1} assert omlet.samples == {"Sample2": sample2} assert pancake.switches == {"Switch1": switch1} assert omlet.switches == {"Switch2": switch2}
def test_registry(): assert registry.flags(EXTENSION_NAME) == {} assert registry.flags("ext") == {} assert registry.samples(EXTENSION_NAME) == {} assert registry.samples("ext") == {} assert registry.switches(EXTENSION_NAME) == {} assert registry.switches("ext") == {} flag1 = Flag("Flag1", False) flag2 = Flag("Flag2", False) flag3 = Flag("Flag3", False, "ext") sample1 = Sample("Sample1", 42) sample2 = Sample("Sample2", 42) sample3 = Sample("Sample3", 42, "ext") switch1 = Switch("Switch1", False) switch2 = Switch("Switch2", False) switch3 = Switch("Switch3", False, "ext") assert registry.flags(EXTENSION_NAME) == {"Flag1": flag1, "Flag2": flag2} assert registry.flags("ext") == {"Flag3": flag3} assert registry.samples(EXTENSION_NAME) == { "Sample1": sample1, "Sample2": sample2 } assert registry.samples("ext") == {"Sample3": sample3} assert registry.switches(EXTENSION_NAME) == { "Switch1": switch1, "Switch2": switch2 } assert registry.switches("ext") == {"Switch3": switch3}
from flask import Flask from flask_redis import FlaskRedis from flask_pancake import FlaskPancake, Switch app = Flask(__name__) pancake = FlaskPancake(app) redis = FlaskRedis(app) SWITCH_FEATURE = Switch("FEATURE", default=False) @app.route("/") def index(): if SWITCH_FEATURE.is_active(): return ( "Hello World!<br>It worked!<br>Now, try to set the key " "<code>SWITCH:FEATURE</code> back to <code>0</code> or delete the " "key in Redis with <code>del SWITCH:FEATURE</code>. " "Then refresh the page again.", 200, ) else: return ( "Not found<br>Try setting the key <code>SWITCH:FEATURE</code> " "in Redis to <code>1</code> using <code>set SWITCH:FEATURE 1</code>. " "Refresh the page afterwards.", 404, )
def test_out_of_bounds_default(): with pytest.raises( ValueError, match=r"Default value for switch X must be True or False\.", ): Switch("X", 2)
def test_scoped_key(app: Flask): FlaskPancake(app, name="scopy") switch = Switch("my-switch", True, extension="scopy") assert switch.key == "SWITCH:scopy:MY-SWITCH"
def test_key(app: Flask): switch = Switch("my-switch", True) assert switch.key == "SWITCH:pancake:MY-SWITCH"
def test_switch(app: Flask): off = Switch("default_off", False) on = Switch("default_on", True) assert app.extensions["redis"].get("SWITCH:pancake:DEFAULT_OFF") is None assert app.extensions["redis"].get("SWITCH:pancake:DEFAULT_ON") is None assert off.is_active() is False assert on.is_active() is True assert app.extensions["redis"].get( "SWITCH:pancake:DEFAULT_OFF") == RAW_FALSE assert app.extensions["redis"].get("SWITCH:pancake:DEFAULT_ON") == RAW_TRUE off.enable() on.disable() assert app.extensions["redis"].get( "SWITCH:pancake:DEFAULT_OFF") == RAW_TRUE assert app.extensions["redis"].get( "SWITCH:pancake:DEFAULT_ON") == RAW_FALSE assert off.is_active() is True assert on.is_active() is False off.clear() assert app.extensions["redis"].get("SWITCH:pancake:DEFAULT_OFF") is None