3 use PHPUnit\Framework\TestCase;
4 require_once(
'FeatureGateConfig.i');
5 require_once(
'CreditUnionGate.i');
8 private $featureGateConfig;
11 protected function setUp() {
15 $this->featureGateConfig = $this
16 ->getMockBuilder(FeatureGateConfig::class)
17 ->setMethods([
'GetConfig'])
18 ->disableOriginalConstructor()
21 $this->featureGateConfig
22 ->expects(static::once())
24 ->will(static::returnCallback(
32 'feature' =>
'FEATURE_A',
37 'feature' =>
'FEATURE_B',
42 'feature' =>
'FEATURE_C',
44 'enabled_cu' =>
'["MYCU","CUL8TR"]',
45 'params' =>
'{"MYCU":{"usernames":["smith","jones"]}, "SCRUBCU":{"usernames":["bongobob", "4188"]},"CUL8TR":{"usernames":["mike"], "ip":["1.2.3.4","3.4.5.6"]}}',
48 'feature' =>
'FEATURE_E',
50 'enabled_cu' =>
'["SCRUBCU","CUL8TR"]',
51 'params' =>
'{"MYCU":{"usernames":["smith","jones"]}, "SCRUBCU":{"usernames":["bongobob", "4188"]},"CUL8TR":{"usernames":["mike"], "ip":["1.2.3.4","3.4.5.6"]}}',
56 public function testWillPass() {
57 $class =
new ReflectionClass(FeatureGateConfig::class);
58 $loadConfig = $class->getMethod(
'LoadConfig');
59 $loadConfig->setAccessible(
true);
60 $loadConfig->invoke($this->featureGateConfig);
63 $featureAGate =
new CreditUnionGate(
'FEATURE_A', $this->featureGateConfig);
64 static::assertTrue($featureAGate->WillPass(
'SCRUBCU'));
65 static::assertTrue($featureAGate->WillPass(
'CRUISECU'));
68 $featureBGate =
new CreditUnionGate(
'FEATURE_B', $this->featureGateConfig);
69 static::assertFalse($featureBGate->WillPass(
'SCRUBCU'));
70 static::assertFalse($featureBGate->WillPass(
'CRUISECU'));
73 $featureCGate =
new CreditUnionGate(
'FEATURE_C', $this->featureGateConfig);
74 static::assertFalse($featureCGate->WillPass(
'SCRUBCU'));
75 static::assertFalse($featureCGate->WillPass(
'CRUISECU'));
76 static::assertTrue($featureCGate->WillPass(
'MYCU'));
77 static::assertTrue($featureCGate->WillPass(
'CUL8TR'));
78 static::assertFalse($featureCGate->WillPass(
'NOCU'));
81 static::assertTrue($featureCGate->WillPass(
"MYCU", [
'username'=>
'jones']));
82 static::assertFalse($featureCGate->WillPass(
"SCRUBCU", [
'username'=>
'BongoBob']));
83 static::assertTrue($featureCGate->WillPass(
"CUL8TR", [
'username'=>
'mike',
'ip'=>
'1.2.3.4']));
84 static::assertFalse($featureCGate->WillPass(
"CUL8TR", [
'username'=>
'mike1']));
85 static::assertTrue($featureCGate->WillPass(
"CUL8TR", [
'username'=>
'mike']));
88 $featureEGate =
new CreditUnionGate(
'FEATURE_E', $this->featureGateConfig);
89 static::assertTrue($featureEGate->WillPass(
"SCRUBCU", [
'username'=>
'BongoBob']));
90 static::assertTrue($featureEGate->WillPass(
"CUL8TR", [
'username'=>
'MiKe']));
93 public function testInvalidFeature() {
94 $class =
new ReflectionClass(FeatureGateConfig::class);
95 $loadConfig = $class->getMethod(
'LoadConfig');
96 $loadConfig->setAccessible(
true);
97 $loadConfig->invoke($this->featureGateConfig);
99 $featureDGate =
new CreditUnionGate(
'FEATURE_D', $this->featureGateConfig);
100 static::assertFalse($featureDGate->WillPass(
'SCRUBCU'));
103 public function testNoEnabledCU() {
106 'feature' =>
'FEATURE_A',
107 'enabled_all' =>
'N',
108 'enabled_cu' =>
'[]',
112 $class =
new ReflectionClass(FeatureGateConfig::class);
113 $loadConfig = $class->getMethod(
'LoadConfig');
114 $loadConfig->setAccessible(
true);
115 $loadConfig->invoke($this->featureGateConfig);
117 $featureAGate =
new CreditUnionGate(
'FEATURE_A', $this->featureGateConfig);
118 static::assertFalse($featureAGate->WillPass(
'SCRUBCU'));
121 public function testMissingFeature() {
122 $class =
new ReflectionClass(FeatureGateConfig::class);
123 $loadConfig = $class->getMethod(
'LoadConfig');
124 $loadConfig->setAccessible(
true);
125 $loadConfig->invoke($this->featureGateConfig);
127 static::expectException(Exception::class);
128 static::expectExceptionMessage(
'Must supply a non-empty feature');