|
@@ -331,43 +331,6 @@
|
|
|
<span id="328">328</span>
|
|
|
<span id="329">329</span>
|
|
|
<span id="330">330</span>
|
|
|
-<span id="331">331</span>
|
|
|
-<span id="332">332</span>
|
|
|
-<span id="333">333</span>
|
|
|
-<span id="334">334</span>
|
|
|
-<span id="335">335</span>
|
|
|
-<span id="336">336</span>
|
|
|
-<span id="337">337</span>
|
|
|
-<span id="338">338</span>
|
|
|
-<span id="339">339</span>
|
|
|
-<span id="340">340</span>
|
|
|
-<span id="341">341</span>
|
|
|
-<span id="342">342</span>
|
|
|
-<span id="343">343</span>
|
|
|
-<span id="344">344</span>
|
|
|
-<span id="345">345</span>
|
|
|
-<span id="346">346</span>
|
|
|
-<span id="347">347</span>
|
|
|
-<span id="348">348</span>
|
|
|
-<span id="349">349</span>
|
|
|
-<span id="350">350</span>
|
|
|
-<span id="351">351</span>
|
|
|
-<span id="352">352</span>
|
|
|
-<span id="353">353</span>
|
|
|
-<span id="354">354</span>
|
|
|
-<span id="355">355</span>
|
|
|
-<span id="356">356</span>
|
|
|
-<span id="357">357</span>
|
|
|
-<span id="358">358</span>
|
|
|
-<span id="359">359</span>
|
|
|
-<span id="360">360</span>
|
|
|
-<span id="361">361</span>
|
|
|
-<span id="362">362</span>
|
|
|
-<span id="363">363</span>
|
|
|
-<span id="364">364</span>
|
|
|
-<span id="365">365</span>
|
|
|
-<span id="366">366</span>
|
|
|
-<span id="367">367</span>
|
|
|
</pre><div class="example-wrap"><pre class="rust ">
|
|
|
<span class="comment">/*
|
|
|
* Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
|
|
@@ -387,6 +350,7 @@
|
|
|
*/</span>
|
|
|
<span class="kw">use</span> <span class="ident">actix_identity::Identity</span>;
|
|
|
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
|
|
|
+<span class="kw">use</span> <span class="ident">futures::future::try_join_all</span>;
|
|
|
<span class="kw">use</span> <span class="ident">libmcaptcha</span>::{<span class="ident">defense::Level</span>, <span class="ident">DefenseBuilder</span>};
|
|
|
<span class="kw">use</span> <span class="ident">log::debug</span>;
|
|
|
<span class="kw">use</span> <span class="ident">serde</span>::{<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>};
|
|
@@ -400,7 +364,7 @@
|
|
|
|
|
|
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Levels</span> {
|
|
|
<span class="kw">pub</span> <span class="ident">add</span>: <span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>,
|
|
|
- <span class="kw">pub</span> <span class="ident">delete</span>: <span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>,
|
|
|
+ <span class="comment">// pub delete: &'static str,</span>
|
|
|
<span class="kw">pub</span> <span class="ident">get</span>: <span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>,
|
|
|
<span class="kw">pub</span> <span class="ident">update</span>: <span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>,
|
|
|
}
|
|
@@ -409,11 +373,11 @@
|
|
|
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Levels</span> {
|
|
|
<span class="kw">let</span> <span class="ident">add</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/levels/add"</span>;
|
|
|
<span class="kw">let</span> <span class="ident">update</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/levels/update"</span>;
|
|
|
- <span class="kw">let</span> <span class="ident">delete</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/levels/delete"</span>;
|
|
|
+ <span class="comment">// let delete = "/api/v1/mcaptcha/levels/delete";</span>
|
|
|
<span class="kw">let</span> <span class="ident">get</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/levels/get"</span>;
|
|
|
<span class="ident">Levels</span> {
|
|
|
<span class="ident">add</span>,
|
|
|
- <span class="ident">delete</span>,
|
|
|
+ <span class="comment">// delete,</span>
|
|
|
<span class="ident">get</span>,
|
|
|
<span class="ident">update</span>,
|
|
|
}
|
|
@@ -431,7 +395,6 @@
|
|
|
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">services</span>(<span class="ident">cfg</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">web::ServiceConfig</span>) {
|
|
|
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">add_levels</span>);
|
|
|
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">update_levels</span>);
|
|
|
- <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">delete_levels</span>);
|
|
|
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">get_levels</span>);
|
|
|
}
|
|
|
|
|
@@ -458,10 +421,12 @@
|
|
|
|
|
|
<span class="macro">debug!</span>(<span class="string">"config created"</span>);
|
|
|
|
|
|
+ <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">futs</span> <span class="op">=</span> <span class="ident">Vec::with_capacity</span>(<span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">len</span>());
|
|
|
+
|
|
|
<span class="kw">for</span> <span class="ident">level</span> <span class="kw">in</span> <span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">iter</span>() {
|
|
|
<span class="kw">let</span> <span class="ident">difficulty_factor</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">difficulty_factor</span> <span class="kw">as</span> <span class="ident">i32</span>;
|
|
|
<span class="kw">let</span> <span class="ident">visitor_threshold</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">visitor_threshold</span> <span class="kw">as</span> <span class="ident">i32</span>;
|
|
|
- <span class="macro">sqlx::query!</span>(
|
|
|
+ <span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
|
|
|
<span class="string">"INSERT INTO mcaptcha_levels (
|
|
|
difficulty_factor,
|
|
|
visitor_threshold,
|
|
@@ -476,17 +441,20 @@
|
|
|
<span class="kw-2">&</span><span class="ident">mcaptcha_config</span>.<span class="ident">key</span>,
|
|
|
<span class="kw-2">&</span><span class="ident">username</span>,
|
|
|
)
|
|
|
- .<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>)
|
|
|
- .<span class="kw">await</span><span class="question-mark">?</span>;
|
|
|
+ .<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>);
|
|
|
+ <span class="ident">futs</span>.<span class="ident">push</span>(<span class="ident">fut</span>);
|
|
|
}
|
|
|
|
|
|
+ <span class="ident">try_join_all</span>(<span class="ident">futs</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
|
|
+
|
|
|
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>().<span class="ident">json</span>(<span class="ident">mcaptcha_config</span>))
|
|
|
}
|
|
|
|
|
|
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Serialize</span>, <span class="ident">Deserialize</span>)]</span>
|
|
|
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">UpdateLevels</span> {
|
|
|
<span class="kw">pub</span> <span class="ident">levels</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">Level</span><span class="op">></span>,
|
|
|
- <span class="doccomment">/// name is config_name</span>
|
|
|
+ <span class="kw">pub</span> <span class="ident">duration</span>: <span class="ident">u32</span>,
|
|
|
+ <span class="kw">pub</span> <span class="ident">description</span>: <span class="ident">String</span>,
|
|
|
<span class="kw">pub</span> <span class="ident">key</span>: <span class="ident">String</span>,
|
|
|
}
|
|
|
|
|
@@ -511,7 +479,8 @@
|
|
|
<span class="comment">// still, needs to be benchmarked</span>
|
|
|
<span class="ident">defense</span>.<span class="ident">build</span>()<span class="question-mark">?</span>;
|
|
|
|
|
|
- <span class="macro">sqlx::query!</span>(
|
|
|
+ <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">futs</span> <span class="op">=</span> <span class="ident">Vec::with_capacity</span>(<span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">len</span>() <span class="op">+</span> <span class="number">2</span>);
|
|
|
+ <span class="kw">let</span> <span class="ident">del_fut</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
|
|
|
<span class="string">"DELETE FROM mcaptcha_levels
|
|
|
WHERE config_id = (
|
|
|
SELECT config_id FROM mcaptcha_config where key = ($1)
|
|
@@ -522,13 +491,26 @@
|
|
|
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>,
|
|
|
<span class="kw-2">&</span><span class="ident">username</span>
|
|
|
)
|
|
|
- .<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>)
|
|
|
- .<span class="kw">await</span><span class="question-mark">?</span>;
|
|
|
+ .<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>); <span class="comment">//.await?;</span>
|
|
|
+
|
|
|
+ <span class="kw">let</span> <span class="ident">update_fut</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
|
|
|
+ <span class="string">"UPDATE mcaptcha_config SET name = $1, duration = $2
|
|
|
+ WHERE user_id = (SELECT ID FROM mcaptcha_users WHERE name = $3)
|
|
|
+ AND key = $4"</span>,
|
|
|
+ <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">description</span>,
|
|
|
+ <span class="ident">payload</span>.<span class="ident">duration</span> <span class="kw">as</span> <span class="ident">i32</span>,
|
|
|
+ <span class="kw-2">&</span><span class="ident">username</span>,
|
|
|
+ <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>,
|
|
|
+ )
|
|
|
+ .<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>); <span class="comment">//.await?;</span>
|
|
|
+
|
|
|
+ <span class="ident">futs</span>.<span class="ident">push</span>(<span class="ident">del_fut</span>);
|
|
|
+ <span class="ident">futs</span>.<span class="ident">push</span>(<span class="ident">update_fut</span>);
|
|
|
|
|
|
<span class="kw">for</span> <span class="ident">level</span> <span class="kw">in</span> <span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">iter</span>() {
|
|
|
<span class="kw">let</span> <span class="ident">difficulty_factor</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">difficulty_factor</span> <span class="kw">as</span> <span class="ident">i32</span>;
|
|
|
<span class="kw">let</span> <span class="ident">visitor_threshold</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">visitor_threshold</span> <span class="kw">as</span> <span class="ident">i32</span>;
|
|
|
- <span class="macro">sqlx::query!</span>(
|
|
|
+ <span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
|
|
|
<span class="string">"INSERT INTO mcaptcha_levels (
|
|
|
difficulty_factor,
|
|
|
visitor_threshold,
|
|
@@ -544,40 +526,11 @@
|
|
|
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>,
|
|
|
<span class="kw-2">&</span><span class="ident">username</span>,
|
|
|
)
|
|
|
- .<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>)
|
|
|
- .<span class="kw">await</span><span class="question-mark">?</span>;
|
|
|
- }
|
|
|
-
|
|
|
- <span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>())
|
|
|
-}
|
|
|
-
|
|
|
-<span class="attribute">#[<span class="ident">my_codegen::post</span>(
|
|
|
- <span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::V1_API_ROUTES.levels.delete"</span>,
|
|
|
- <span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>
|
|
|
-)]</span>
|
|
|
-<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_levels</span>(
|
|
|
- <span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">UpdateLevels</span><span class="op">></span>,
|
|
|
- <span class="ident">data</span>: <span class="ident">AppData</span>,
|
|
|
- <span class="ident">id</span>: <span class="ident">Identity</span>,
|
|
|
-) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
|
|
- <span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
|
|
-
|
|
|
- <span class="kw">for</span> <span class="ident">level</span> <span class="kw">in</span> <span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">iter</span>() {
|
|
|
- <span class="kw">let</span> <span class="ident">difficulty_factor</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">difficulty_factor</span> <span class="kw">as</span> <span class="ident">i32</span>;
|
|
|
- <span class="macro">sqlx::query!</span>(
|
|
|
- <span class="string">"DELETE FROM mcaptcha_levels WHERE
|
|
|
- config_id = (
|
|
|
- SELECT config_id FROM mcaptcha_config WHERE key = $1 AND
|
|
|
- user_id = (SELECT ID from mcaptcha_users WHERE name = $3)
|
|
|
- ) AND difficulty_factor = ($2);"</span>,
|
|
|
- <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>,
|
|
|
- <span class="ident">difficulty_factor</span>,
|
|
|
- <span class="kw-2">&</span><span class="ident">username</span>
|
|
|
- )
|
|
|
- .<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>)
|
|
|
- .<span class="kw">await</span><span class="question-mark">?</span>;
|
|
|
+ .<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>); <span class="comment">//.await?;</span>
|
|
|
+ <span class="ident">futs</span>.<span class="ident">push</span>(<span class="ident">fut</span>);
|
|
|
}
|
|
|
|
|
|
+ <span class="ident">try_join_all</span>(<span class="ident">futs</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
|
|
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>())
|
|
|
}
|
|
|
|
|
@@ -616,7 +569,8 @@
|
|
|
config_id = (
|
|
|
SELECT config_id FROM mcaptcha_config WHERE key = ($1)
|
|
|
AND user_id = (SELECT ID from mcaptcha_users WHERE name = $2)
|
|
|
- );"</span>,
|
|
|
+ )
|
|
|
+ ORDER BY difficulty_factor ASC;"</span>,
|
|
|
<span class="ident">key</span>,
|
|
|
<span class="kw-2">&</span><span class="ident">username</span>
|
|
|
)
|
|
@@ -637,6 +591,15 @@
|
|
|
<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::tests</span>::<span class="kw-2">*</span>;
|
|
|
<span class="kw">use</span> <span class="kw">crate</span>::<span class="kw-2">*</span>;
|
|
|
|
|
|
+ <span class="kw">const</span> <span class="ident">L1</span>: <span class="ident">Level</span> <span class="op">=</span> <span class="ident">Level</span> {
|
|
|
+ <span class="ident">difficulty_factor</span>: <span class="number">100</span>,
|
|
|
+ <span class="ident">visitor_threshold</span>: <span class="number">10</span>,
|
|
|
+ };
|
|
|
+ <span class="kw">const</span> <span class="ident">L2</span>: <span class="ident">Level</span> <span class="op">=</span> <span class="ident">Level</span> {
|
|
|
+ <span class="ident">difficulty_factor</span>: <span class="number">1000</span>,
|
|
|
+ <span class="ident">visitor_threshold</span>: <span class="number">1000</span>,
|
|
|
+ };
|
|
|
+
|
|
|
<span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
|
|
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">level_routes_work</span>() {
|
|
|
<span class="kw">const</span> <span class="ident">NAME</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testuserlevelroutes"</span>;
|
|
@@ -655,8 +618,7 @@
|
|
|
|
|
|
<span class="comment">// 2. get level</span>
|
|
|
|
|
|
- <span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">L1</span>, <span class="ident">L2</span>];
|
|
|
-
|
|
|
+ <span class="kw">let</span> <span class="ident">add_level</span> <span class="op">=</span> <span class="ident">get_level_data</span>();
|
|
|
<span class="kw">let</span> <span class="ident">get_level_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
|
|
<span class="kw-2">&</span><span class="ident">app</span>,
|
|
|
<span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">key</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">get</span>)
|
|
@@ -666,64 +628,28 @@
|
|
|
.<span class="kw">await</span>;
|
|
|
<span class="macro">assert_eq!</span>(<span class="ident">get_level_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"><</span><span class="ident">Level</span><span class="op">></span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">get_level_resp</span>).<span class="kw">await</span>;
|
|
|
- <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">levels</span>);
|
|
|
+ <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">add_level</span>.<span class="ident">levels</span>);
|
|
|
|
|
|
<span class="comment">// 3. update level</span>
|
|
|
|
|
|
- <span class="kw">let</span> <span class="ident">l1</span> <span class="op">=</span> <span class="ident">Level</span> {
|
|
|
- <span class="ident">difficulty_factor</span>: <span class="number">10</span>,
|
|
|
- <span class="ident">visitor_threshold</span>: <span class="number">10</span>,
|
|
|
- };
|
|
|
- <span class="kw">let</span> <span class="ident">l2</span> <span class="op">=</span> <span class="ident">Level</span> {
|
|
|
- <span class="ident">difficulty_factor</span>: <span class="number">5000</span>,
|
|
|
- <span class="ident">visitor_threshold</span>: <span class="number">5000</span>,
|
|
|
- };
|
|
|
- <span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">l1</span>, <span class="ident">l2</span>];
|
|
|
- <span class="kw">let</span> <span class="ident">add_level</span> <span class="op">=</span> <span class="ident">UpdateLevels</span> {
|
|
|
- <span class="ident">levels</span>: <span class="ident">levels</span>.<span class="ident">clone</span>(),
|
|
|
- <span class="ident">key</span>: <span class="ident">key</span>.<span class="ident">key</span>.<span class="ident">clone</span>(),
|
|
|
- };
|
|
|
- <span class="kw">let</span> <span class="ident">add_token_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
|
|
- <span class="kw-2">&</span><span class="ident">app</span>,
|
|
|
- <span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">add_level</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">update</span>)
|
|
|
- .<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
|
|
|
- .<span class="ident">to_request</span>(),
|
|
|
- )
|
|
|
- .<span class="kw">await</span>;
|
|
|
- <span class="macro">assert_eq!</span>(<span class="ident">add_token_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
|
|
- <span class="kw">let</span> <span class="ident">get_level_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
|
|
- <span class="kw-2">&</span><span class="ident">app</span>,
|
|
|
- <span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">key</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</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>(),
|
|
|
- )
|
|
|
- .<span class="kw">await</span>;
|
|
|
- <span class="macro">assert_eq!</span>(<span class="ident">get_level_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"><</span><span class="ident">Level</span><span class="op">></span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">get_level_resp</span>).<span class="kw">await</span>;
|
|
|
- <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">levels</span>);
|
|
|
+ <span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">L1</span>, <span class="ident">L2</span>];
|
|
|
|
|
|
- <span class="comment">// 4. delete level</span>
|
|
|
- <span class="kw">let</span> <span class="ident">l1</span> <span class="op">=</span> <span class="ident">Level</span> {
|
|
|
- <span class="ident">difficulty_factor</span>: <span class="number">10</span>,
|
|
|
- <span class="ident">visitor_threshold</span>: <span class="number">10</span>,
|
|
|
- };
|
|
|
- <span class="kw">let</span> <span class="ident">l2</span> <span class="op">=</span> <span class="ident">Level</span> {
|
|
|
- <span class="ident">difficulty_factor</span>: <span class="number">5000</span>,
|
|
|
- <span class="ident">visitor_threshold</span>: <span class="number">5000</span>,
|
|
|
- };
|
|
|
- <span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">l1</span>, <span class="ident">l2</span>];
|
|
|
- <span class="kw">let</span> <span class="ident">add_level</span> <span class="op">=</span> <span class="ident">UpdateLevels</span> {
|
|
|
- <span class="ident">levels</span>: <span class="ident">levels</span>.<span class="ident">clone</span>(),
|
|
|
+ <span class="kw">let</span> <span class="ident">update_level</span> <span class="op">=</span> <span class="ident">UpdateLevels</span> {
|
|
|
<span class="ident">key</span>: <span class="ident">key</span>.<span class="ident">key</span>.<span class="ident">clone</span>(),
|
|
|
+ <span class="ident">levels</span>: <span class="ident">levels</span>.<span class="ident">clone</span>(),
|
|
|
+ <span class="ident">description</span>: <span class="ident">add_level</span>.<span class="ident">description</span>,
|
|
|
+ <span class="ident">duration</span>: <span class="ident">add_level</span>.<span class="ident">duration</span>,
|
|
|
};
|
|
|
+
|
|
|
<span class="kw">let</span> <span class="ident">add_token_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
|
|
<span class="kw-2">&</span><span class="ident">app</span>,
|
|
|
- <span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">add_level</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">delete</span>)
|
|
|
+ <span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">update_level</span>, <span class="kw-2">&</span><span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">update</span>)
|
|
|
.<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
|
|
|
.<span class="ident">to_request</span>(),
|
|
|
)
|
|
|
.<span class="kw">await</span>;
|
|
|
<span class="macro">assert_eq!</span>(<span class="ident">add_token_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
|
|
+
|
|
|
<span class="kw">let</span> <span class="ident">get_level_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
|
|
<span class="kw-2">&</span><span class="ident">app</span>,
|
|
|
<span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">key</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">get</span>)
|
|
@@ -733,7 +659,7 @@
|
|
|
.<span class="kw">await</span>;
|
|
|
<span class="macro">assert_eq!</span>(<span class="ident">get_level_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"><</span><span class="ident">Level</span><span class="op">></span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">get_level_resp</span>).<span class="kw">await</span>;
|
|
|
- <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">Vec::new</span>());
|
|
|
+ <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">levels</span>);
|
|
|
}
|
|
|
}
|
|
|
</pre></div>
|