Example #1
0
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}
Example #2
0
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}
Example #3
0
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,
        )
Example #4
0
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)
Example #5
0
def test_scoped_key(app: Flask):
    FlaskPancake(app, name="scopy")
    switch = Switch("my-switch", True, extension="scopy")
    assert switch.key == "SWITCH:scopy:MY-SWITCH"
Example #6
0
def test_key(app: Flask):
    switch = Switch("my-switch", True)
    assert switch.key == "SWITCH:pancake:MY-SWITCH"
Example #7
0
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