git.fiddlerwoaroof.com
Browse code

user token supplier uses delegate

Greg Wiley authored on 21/04/2017 00:26:46
Showing 4 changed files
... ...
@@ -2,15 +2,30 @@
2 2
 #define _TOKEN_H
3 3
 #include <string>
4 4
 #include <memory>
5
-
5
+#include <iostream>
6 6
 #include "user.h"
7 7
 
8
-class user_token_supplier
8
+
9
+
10
+class user_token_supplier_ifc
9 11
 {
10 12
 public:
11
-    virtual std::string token (user user) = 0;
13
+    virtual std::string token (const user &user) {
14
+        return "";
15
+    }
12 16
 };
13
-typedef std::shared_ptr<user_token_supplier> user_token_supplier_p;
17
+
18
+class user_token_supplier : public user_token_supplier_ifc {
19
+    private:
20
+        std::shared_ptr<user_token_supplier_ifc> delegate_;
21
+    public:
22
+        user_token_supplier(std::shared_ptr<user_token_supplier_ifc> delegate) : delegate_(delegate) {}
23
+        user_token_supplier() : user_token_supplier(std::shared_ptr<user_token_supplier_ifc>(new user_token_supplier_ifc)) {}
24
+        std::string token(const user &user) {
25
+            return delegate_->token(user);
26
+        }
27
+};
28
+
14 29
 
15 30
 #endif
16 31
 
... ...
@@ -9,10 +9,10 @@ class impl : public validator_ifc
9 9
 {
10 10
 private:
11 11
     directory directory_;
12
-    user_token_supplier_p user_token_supplier_;
12
+    user_token_supplier user_token_supplier_;
13 13
 public:
14 14
     impl (const directory &directory,
15
-          const user_token_supplier_p user_token_supplier) :
15
+          const user_token_supplier user_token_supplier) :
16 16
         directory_ (directory),
17 17
         user_token_supplier_ (user_token_supplier) {}
18 18
     bool validate (const std::string &user_name,
... ...
@@ -24,14 +24,14 @@ public:
24 24
             return false;
25 25
         }
26 26
 
27
-        std::string user_token = user_token_supplier_->token (found_user[0]);
27
+        std::string user_token = user_token_supplier_.token (found_user[0]);
28 28
         return user_token == token;
29 29
     }
30 30
 };
31 31
 }
32 32
 
33 33
 validator create_validator (const directory &directory,
34
-                            const user_token_supplier_p &user_token_supplier)
34
+                            const user_token_supplier &user_token_supplier)
35 35
 {
36 36
     std::shared_ptr<validator_ifc> delegate (new impl (directory,
37 37
             user_token_supplier));
... ...
@@ -34,7 +34,7 @@ public:
34 34
 };
35 35
 
36 36
 validator create_validator (const directory &directory,
37
-                            const user_token_supplier_p &token_supplier);
37
+                            const user_token_supplier &token_supplier);
38 38
 
39 39
 #endif
40 40
 
... ...
@@ -35,7 +35,7 @@ private:
35 35
 public:
36 36
     fake_user_token_supplier (const std::string &token) : token_ (token) {}
37 37
     fake_user_token_supplier() : token_ ("_NOT_A_TOKEN") {}
38
-    virtual std::string token (user user)
38
+    virtual std::string token (const user &user)
39 39
     {
40 40
         return token_;
41 41
     }
... ...
@@ -52,14 +52,13 @@ bool validator_validates()
52 52
 
53 53
     // given
54 54
     std::string token = "token";
55
-    user_token_supplier_p user_token_supplier (new fake_user_token_supplier (
56
-                token));
55
+    user_token_supplier user_token_supplier (share(new fake_user_token_supplier(token)));
57 56
     std::string user_name = "msmith";
58 57
     directory directory (share (new fake_directory (user_name)));
59 58
     validator validator = create_validator (directory, user_token_supplier);
60 59
 
61 60
     // when
62
-    bool actual = validator.validate (user_name, "token");
61
+    bool actual = validator.validate (user_name, token);
63 62
 
64 63
     // then
65 64
     check (actual, "should be valid");
... ...
@@ -71,8 +70,7 @@ bool validator_fails_unknown_user()
71 70
 
72 71
     // given
73 72
     std::string token = "token";
74
-    user_token_supplier_p user_token_supplier (new fake_user_token_supplier (
75
-                token));
73
+    user_token_supplier user_token_supplier (share(new fake_user_token_supplier));
76 74
     directory directory (share (new fake_directory));
77 75
     validator validator = create_validator (directory, user_token_supplier);
78 76
 
... ...
@@ -88,7 +86,7 @@ bool validator_fails_incorrect_token()
88 86
 {
89 87
 
90 88
     // given
91
-    user_token_supplier_p user_token_supplier (new fake_user_token_supplier);
89
+    user_token_supplier user_token_supplier (share(new fake_user_token_supplier));
92 90
     std::string user_name = "msmith";
93 91
     directory directory (share (new fake_directory (user_name)));
94 92
     validator validator = create_validator (directory, user_token_supplier);