Deploying to gh-pages from @ 855dbc60ef 🚀

This commit is contained in:
realaravinth
2021-12-18 08:34:32 +00:00
parent eec2c02b4f
commit 04b066aba5
153 changed files with 2662 additions and 2650 deletions

View File

@@ -143,6 +143,36 @@
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
<span id="146">146</span>
<span id="147">147</span>
<span id="148">148</span>
<span id="149">149</span>
<span id="150">150</span>
<span id="151">151</span>
<span id="152">152</span>
<span id="153">153</span>
<span id="154">154</span>
<span id="155">155</span>
<span id="156">156</span>
<span id="157">157</span>
<span id="158">158</span>
<span id="159">159</span>
<span id="160">160</span>
<span id="161">161</span>
<span id="162">162</span>
<span id="163">163</span>
<span id="164">164</span>
<span id="165">165</span>
<span id="166">166</span>
<span id="167">167</span>
<span id="168">168</span>
<span id="169">169</span>
<span id="170">170</span>
<span id="171">171</span>
<span id="172">172</span>
<span id="173">173</span>
<span id="174">174</span>
<span id="175">175</span>
</pre><pre class="rust"><code><span class="comment">/*
* Copyright (C) 2021 Aravinth Manivannan &lt;realaravinth@batsense.net&gt;
*
@@ -160,9 +190,11 @@
* along with this program. If not, see &lt;https://www.gnu.org/licenses/&gt;.
*/</span>
<span class="kw">use</span> <span class="ident">std::time::Duration</span>;
<span class="comment">//use std::sync::atomicBool</span>
<span class="kw">use</span> <span class="ident">actix::clock::sleep</span>;
<span class="kw">use</span> <span class="ident">actix::spawn</span>;
<span class="kw">use</span> <span class="ident">tokio::task::JoinHandle</span>;
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::account::delete::runners::delete_user</span>;
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::account</span>::{<span class="ident">username::runners::username_exists</span>, <span class="ident">AccountCheckPayload</span>};
@@ -176,52 +208,79 @@
<span class="doccomment">/// Demo password</span>
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEMO_PASSWORD</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;password&quot;</span>;
<span class="doccomment">/// register demo user runner</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">register_demo_user</span>(<span class="ident">data</span>: <span class="kw-2">&amp;</span><span class="ident">AppData</span>) -&gt; <span class="ident">ServiceResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">user_exists_payload</span> <span class="op">=</span> <span class="ident">AccountCheckPayload</span> {
<span class="ident">val</span>: <span class="ident">DEMO_USER</span>.<span class="ident">into</span>(),
};
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">DemoUser</span> {
<span class="ident">data</span>: <span class="ident">AppData</span>,
<span class="ident">duration</span>: <span class="ident">Duration</span>,
<span class="ident">handle</span>: <span class="ident">JoinHandle</span><span class="op">&lt;</span>()<span class="op">&gt;</span>,
}
<span class="kw">if</span> <span class="op">!</span><span class="ident">username_exists</span>(<span class="kw-2">&amp;</span><span class="ident">user_exists_payload</span>, <span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>.<span class="ident">exists</span> {
<span class="kw">let</span> <span class="ident">register_payload</span> <span class="op">=</span> <span class="ident">Register</span> {
<span class="ident">username</span>: <span class="ident">DEMO_USER</span>.<span class="ident">into</span>(),
<span class="ident">password</span>: <span class="ident">DEMO_PASSWORD</span>.<span class="ident">into</span>(),
<span class="ident">confirm_password</span>: <span class="ident">DEMO_PASSWORD</span>.<span class="ident">into</span>(),
<span class="ident">email</span>: <span class="prelude-val">None</span>,
<span class="kw">impl</span> <span class="ident">DemoUser</span> {
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">spawn</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">duration</span>: <span class="ident">Duration</span>) -&gt; <span class="ident">ServiceResult</span><span class="op">&lt;</span><span class="self">Self</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">handle</span> <span class="op">=</span> <span class="ident"><span class="self">Self</span>::run</span>(<span class="ident">data</span>.<span class="ident">clone</span>(), <span class="ident">duration</span>.<span class="ident">clone</span>()).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">d</span> <span class="op">=</span> <span class="self">Self</span> {
<span class="ident">data</span>,
<span class="ident">duration</span>,
<span class="ident">handle</span>,
};
<span class="macro">log::info!</span>(<span class="string">&quot;Registering demo user&quot;</span>);
<span class="kw">match</span> <span class="ident">register_runner</span>(<span class="kw-2">&amp;</span><span class="ident">register_payload</span>, <span class="ident">data</span>).<span class="kw">await</span> {
<span class="prelude-val">Err</span>(<span class="ident">ServiceError::UsernameTaken</span>) <span class="op">|</span> <span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; <span class="prelude-val">Ok</span>(()),
<span class="prelude-val">Err</span>(<span class="ident">e</span>) =&gt; <span class="prelude-val">Err</span>(<span class="ident">e</span>),
<span class="prelude-val">Ok</span>(<span class="ident">d</span>)
}
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">dead_code</span>)]</span>
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">abort</span>(<span class="kw-2">&amp;</span><span class="self">self</span>) {
<span class="self">self</span>.<span class="ident">handle</span>.<span class="ident">abort</span>();
}
<span class="doccomment">/// register demo user runner</span>
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">register_demo_user</span>(<span class="ident">data</span>: <span class="kw-2">&amp;</span><span class="ident">AppData</span>) -&gt; <span class="ident">ServiceResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">user_exists_payload</span> <span class="op">=</span> <span class="ident">AccountCheckPayload</span> {
<span class="ident">val</span>: <span class="ident">DEMO_USER</span>.<span class="ident">into</span>(),
};
<span class="kw">if</span> <span class="op">!</span><span class="ident">username_exists</span>(<span class="kw-2">&amp;</span><span class="ident">user_exists_payload</span>, <span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>.<span class="ident">exists</span> {
<span class="kw">let</span> <span class="ident">register_payload</span> <span class="op">=</span> <span class="ident">Register</span> {
<span class="ident">username</span>: <span class="ident">DEMO_USER</span>.<span class="ident">into</span>(),
<span class="ident">password</span>: <span class="ident">DEMO_PASSWORD</span>.<span class="ident">into</span>(),
<span class="ident">confirm_password</span>: <span class="ident">DEMO_PASSWORD</span>.<span class="ident">into</span>(),
<span class="ident">email</span>: <span class="prelude-val">None</span>,
};
<span class="macro">log::info!</span>(<span class="string">&quot;Registering demo user&quot;</span>);
<span class="kw">match</span> <span class="ident">register_runner</span>(<span class="kw-2">&amp;</span><span class="ident">register_payload</span>, <span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span> {
<span class="prelude-val">Err</span>(<span class="ident">ServiceError::UsernameTaken</span>) <span class="op">|</span> <span class="prelude-val">Ok</span>(<span class="kw">_</span>) =&gt; <span class="prelude-val">Ok</span>(()),
<span class="prelude-val">Err</span>(<span class="ident">e</span>) =&gt; <span class="prelude-val">Err</span>(<span class="ident">e</span>),
}
} <span class="kw">else</span> {
<span class="prelude-val">Ok</span>(())
}
} <span class="kw">else</span> {
}
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_demo_user</span>(<span class="ident">data</span>: <span class="kw-2">&amp;</span><span class="ident">AppData</span>) -&gt; <span class="ident">ServiceResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="macro">log::info!</span>(<span class="string">&quot;Deleting demo user&quot;</span>);
<span class="ident">delete_user</span>(<span class="ident">DEMO_USER</span>, <span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}
}
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_demo_user</span>(<span class="ident">data</span>: <span class="kw-2">&amp;</span><span class="ident">AppData</span>) -&gt; <span class="ident">ServiceResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="macro">log::info!</span>(<span class="string">&quot;Deleting demo user&quot;</span>);
<span class="ident">delete_user</span>(<span class="ident">DEMO_USER</span>, <span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="prelude-val">Ok</span>(())
}
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">run</span>(
<span class="ident">data</span>: <span class="ident">AppData</span>,
<span class="ident">duration</span>: <span class="ident">Duration</span>,
) -&gt; <span class="ident">ServiceResult</span><span class="op">&lt;</span><span class="ident">JoinHandle</span><span class="op">&lt;</span>()<span class="op">&gt;</span><span class="op">&gt;</span> {
<span class="ident"><span class="self">Self</span>::register_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">run</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">duration</span>: <span class="ident">Duration</span>) -&gt; <span class="ident">ServiceResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="ident">register_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
<span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="kw">async</span> <span class="kw">move</span> {
<span class="kw">loop</span> {
<span class="ident">sleep</span>(<span class="ident">duration</span>).<span class="kw">await</span>;
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span> <span class="ident">delete_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span> {
<span class="macro">log::error!</span>(<span class="string">&quot;Error while deleting demo user: {:?}&quot;</span>, <span class="ident">e</span>);
<span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="kw">async</span> <span class="kw">move</span> {
<span class="kw">loop</span> {
<span class="ident">sleep</span>(<span class="ident">duration</span>).<span class="kw">await</span>;
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span> <span class="ident"><span class="self">Self</span>::delete_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span> {
<span class="macro">log::error!</span>(<span class="string">&quot;Error while deleting demo user: {:?}&quot;</span>, <span class="ident">e</span>);
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span> <span class="ident"><span class="self">Self</span>::register_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span> {
<span class="macro">log::error!</span>(<span class="string">&quot;Error while registering demo user: {:?}&quot;</span>, <span class="ident">e</span>);
}
}
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span> <span class="ident">register_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span> {
<span class="macro">log::error!</span>(<span class="string">&quot;Error while registering demo user: {:?}&quot;</span>, <span class="ident">e</span>);
}
}
};
<span class="ident">spawn</span>(<span class="ident">fut</span>);
<span class="prelude-val">Ok</span>(())
};
<span class="kw">let</span> <span class="ident">handle</span> <span class="op">=</span> <span class="ident">spawn</span>(<span class="ident">fut</span>);
<span class="prelude-val">Ok</span>(<span class="ident">handle</span>)
}
}
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
@@ -245,7 +304,7 @@
<span class="kw">let</span> <span class="ident">duration</span> <span class="op">=</span> <span class="ident">Duration::from_secs</span>(<span class="ident">DURATION</span>);
<span class="comment">// register works</span>
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="ident">register_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="ident">DemoUser::register_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">payload</span> <span class="op">=</span> <span class="ident">AccountCheckPayload</span> {
<span class="ident">val</span>: <span class="ident">DEMO_USER</span>.<span class="ident">into</span>(),
};
@@ -253,11 +312,11 @@
<span class="ident">signin</span>(<span class="ident">DEMO_USER</span>, <span class="ident">DEMO_PASSWORD</span>).<span class="kw">await</span>;
<span class="comment">// deletion works</span>
<span class="macro">assert!</span>(<span class="ident"><span class="kw">super</span>::delete_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span>.<span class="ident">is_ok</span>());
<span class="macro">assert!</span>(<span class="ident">DemoUser::delete_demo_user</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span>.<span class="ident">is_ok</span>());
<span class="macro">assert!</span>(<span class="op">!</span><span class="ident">username_exists</span>(<span class="kw-2">&amp;</span><span class="ident">payload</span>, <span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>().<span class="ident">exists</span>);
<span class="comment">// test the runner</span>
<span class="ident">run</span>(<span class="ident">data</span>, <span class="ident">duration</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
<span class="kw">let</span> <span class="ident">user</span> <span class="op">=</span> <span class="ident">DemoUser::spawn</span>(<span class="ident">data</span>, <span class="ident">duration</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
<span class="kw">let</span> (<span class="ident">data_inner</span>, <span class="kw">_</span>, <span class="ident">signin_resp</span>, <span class="ident">token_key</span>) <span class="op">=</span>
<span class="ident">add_levels_util</span>(<span class="ident">DEMO_USER</span>, <span class="ident">DEMO_PASSWORD</span>).<span class="kw">await</span>;
<span class="kw">let</span> <span class="ident">cookies</span> <span class="op">=</span> <span class="macro">get_cookie!</span>(<span class="ident">signin_resp</span>);
@@ -265,7 +324,7 @@
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
<span class="kw-2">&amp;</span><span class="ident">app</span>,
<span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">token_key</span>, <span class="ident"><span class="kw">crate</span>::V1_API_ROUTES</span>.<span class="ident">levels</span>.<span class="ident">get</span>)
<span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">token_key</span>, <span class="ident"><span class="kw">crate</span>::V1_API_ROUTES</span>.<span class="ident">captcha</span>.<span class="ident">get</span>)
.<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
.<span class="ident">to_request</span>(),
)
@@ -278,7 +337,7 @@
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
<span class="kw-2">&amp;</span><span class="ident">app</span>,
<span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">token_key</span>, <span class="ident"><span class="kw">crate</span>::V1_API_ROUTES</span>.<span class="ident">levels</span>.<span class="ident">get</span>)
<span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">token_key</span>, <span class="ident"><span class="kw">crate</span>::V1_API_ROUTES</span>.<span class="ident">captcha</span>.<span class="ident">get</span>)
.<span class="ident">cookie</span>(<span class="ident">cookies</span>)
.<span class="ident">to_request</span>(),
)
@@ -286,6 +345,7 @@
<span class="macro">assert_eq!</span>(<span class="ident">resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
<span class="kw">let</span> <span class="ident">res_levels</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Level</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">resp</span>).<span class="kw">await</span>;
<span class="macro">assert!</span>(<span class="ident">res_levels</span>.<span class="ident">is_empty</span>());
<span class="ident">user</span>.<span class="ident">abort</span>();
}
}
</code></pre></div>