chore: adding user creation tests

This commit is contained in:
canove
2020-10-23 13:12:00 -03:00
parent 3302cd643a
commit 4d01cc3379
54 changed files with 459 additions and 366 deletions

View File

@@ -199,7 +199,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
at Thu Oct 22 2020 13:34:21 GMT-0300 (Brasilia Standard Time)
at Fri Oct 23 2020 11:53:22 GMT-0300 (Brasilia Standard Time)
</div>
</div>
<script src="../prettify.js"></script>

View File

@@ -23,30 +23,30 @@
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="strong">100% </span>
<span class="quiet">Statements</span>
<span class='fraction'>0/70</span>
<span class='fraction'>67/67</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="strong">71.88% </span>
<span class="quiet">Branches</span>
<span class='fraction'>0/1</span>
<span class='fraction'>23/32</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="strong">90% </span>
<span class="quiet">Functions</span>
<span class='fraction'>0/1</span>
<span class='fraction'>9/10</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="strong">100% </span>
<span class="quiet">Lines</span>
<span class='fraction'>0/70</span>
<span class='fraction'>67/67</span>
</div>
@@ -55,7 +55,7 @@
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
</div>
<div class='status-line low'></div>
<div class='status-line high'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a>
@@ -124,149 +124,140 @@
<a name='L65'></a><a href='#L65'>65</a>
<a name='L66'></a><a href='#L66'>66</a>
<a name='L67'></a><a href='#L67'>67</a>
<a name='L68'></a><a href='#L68'>68</a>
<a name='L69'></a><a href='#L69'>69</a>
<a name='L70'></a><a href='#L70'>70</a>
<a name='L71'></a><a href='#L71'>71</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import * as Yup from "yup";</span></span></span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >import AppError from "../../errors/AppError";</span>
<span class="cstat-no" title="statement not covered" >import User from "../../models/User";</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >interface Request {</span>
<span class="cstat-no" title="statement not covered" > email: string;</span>
<span class="cstat-no" title="statement not covered" > password: string;</span>
<span class="cstat-no" title="statement not covered" > name: string;</span>
<span class="cstat-no" title="statement not covered" > profile?: string;</span>
<span class="cstat-no" title="statement not covered" >}</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >interface Response {</span>
<span class="cstat-no" title="statement not covered" > email: string;</span>
<span class="cstat-no" title="statement not covered" > name: string;</span>
<span class="cstat-no" title="statement not covered" > id: number;</span>
<span class="cstat-no" title="statement not covered" > profile: string;</span>
<span class="cstat-no" title="statement not covered" >}</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >const CreateUserService = async ({</span>
<span class="cstat-no" title="statement not covered" > email,</span>
<span class="cstat-no" title="statement not covered" > password,</span>
<span class="cstat-no" title="statement not covered" > name,</span>
<span class="cstat-no" title="statement not covered" > profile = "admin"</span>
<span class="cstat-no" title="statement not covered" >}: Request): Promise&lt;Response&gt; =&gt; {</span>
<span class="cstat-no" title="statement not covered" > const schema = Yup.object().shape({</span>
<span class="cstat-no" title="statement not covered" > name: Yup.string().required().min(2),</span>
<span class="cstat-no" title="statement not covered" > email: Yup.string()</span>
<span class="cstat-no" title="statement not covered" > .email()</span>
<span class="cstat-no" title="statement not covered" > .required()</span>
<span class="cstat-no" title="statement not covered" > .test(</span>
<span class="cstat-no" title="statement not covered" > "Check-email",</span>
<span class="cstat-no" title="statement not covered" > "An user with this email already exists.",</span>
<span class="cstat-no" title="statement not covered" > async value =&gt; {</span>
<span class="cstat-no" title="statement not covered" > if (value) {</span>
<span class="cstat-no" title="statement not covered" > const emailExists = await User.findOne({</span>
<span class="cstat-no" title="statement not covered" > where: { email: value }</span>
<span class="cstat-no" title="statement not covered" > });</span>
<span class="cstat-no" title="statement not covered" > return !emailExists;</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" > return false;</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" > ),</span>
<span class="cstat-no" title="statement not covered" > password: Yup.string().required().min(5)</span>
<span class="cstat-no" title="statement not covered" > });</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > try {</span>
<span class="cstat-no" title="statement not covered" > await schema.validate({ email, password, name });</span>
<span class="cstat-no" title="statement not covered" > } catch (err) {</span>
<span class="cstat-no" title="statement not covered" > throw new AppError(err.message);</span>
<span class="cstat-no" title="statement not covered" > }</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > const user = await User.create({</span>
<span class="cstat-no" title="statement not covered" > email,</span>
<span class="cstat-no" title="statement not covered" > password,</span>
<span class="cstat-no" title="statement not covered" > name,</span>
<span class="cstat-no" title="statement not covered" > profile</span>
<span class="cstat-no" title="statement not covered" > });</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > const serializedUser = {</span>
<span class="cstat-no" title="statement not covered" > id: user.id,</span>
<span class="cstat-no" title="statement not covered" > name: user.name,</span>
<span class="cstat-no" title="statement not covered" > email: user.email,</span>
<span class="cstat-no" title="statement not covered" > profile: user.profile</span>
<span class="cstat-no" title="statement not covered" > };</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" > return serializedUser;</span>
<span class="cstat-no" title="statement not covered" >};</span>
<span class="cstat-no" title="statement not covered" ></span>
<span class="cstat-no" title="statement not covered" >export default CreateUserService;</span>
<a name='L68'></a><a href='#L68'>68</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import * as Yup from "yup";
&nbsp;
import AppError from "../../errors/AppError";
import User from "../../models/User";
&nbsp;
interface Request {
email: string;
password: string;
name: string;
profile?: string;
}
&nbsp;
interface Response {
email: string;
name: string;
id: number;
profile: string;
}
&nbsp;
const CreateUserService = async ({
email,
password,
name,
profile = "admin"
}: Request): Promise&lt;Response&gt; =&gt; {
const schema = Yup.object().shape({
name: Yup.string().required().min(2),
email: Yup.string()
.email()
.required()
.test(
"Check-email",
"An user with this email already exists.",
async value =&gt; {
const emailExists = await User.findOne({
where: { email: value! }
});
return !emailExists;
}
),
password: Yup.string().required().min(5)
});
&nbsp;
try {
await schema.validate({ email, password, name });
} catch (err) {
throw new AppError(err.message);
}
&nbsp;
const user = await User.create({
email,
password,
name,
profile
});
&nbsp;
const serializedUser = {
id: user.id,
name: user.name,
email: user.email,
profile: user.profile
};
&nbsp;
return serializedUser;
};
&nbsp;
export default CreateUserService;<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span></span></span></span></span></span></span></span>
&nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer -->
@@ -274,7 +265,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
at Thu Oct 22 2020 13:34:21 GMT-0300 (Brasilia Standard Time)
at Fri Oct 23 2020 11:53:22 GMT-0300 (Brasilia Standard Time)
</div>
</div>
<script src="../prettify.js"></script>

View File

@@ -142,7 +142,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
at Thu Oct 22 2020 13:34:21 GMT-0300 (Brasilia Standard Time)
at Fri Oct 23 2020 11:53:22 GMT-0300 (Brasilia Standard Time)
</div>
</div>
<script src="../prettify.js"></script>

View File

@@ -217,7 +217,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
at Thu Oct 22 2020 13:34:21 GMT-0300 (Brasilia Standard Time)
at Fri Oct 23 2020 11:53:22 GMT-0300 (Brasilia Standard Time)
</div>
</div>
<script src="../prettify.js"></script>

View File

@@ -112,7 +112,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
at Thu Oct 22 2020 13:34:21 GMT-0300 (Brasilia Standard Time)
at Fri Oct 23 2020 11:53:22 GMT-0300 (Brasilia Standard Time)
</div>
</div>
<script src="../prettify.js"></script>

View File

@@ -268,7 +268,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
at Thu Oct 22 2020 13:34:21 GMT-0300 (Brasilia Standard Time)
at Fri Oct 23 2020 11:53:22 GMT-0300 (Brasilia Standard Time)
</div>
</div>
<script src="../prettify.js"></script>

View File

@@ -23,30 +23,30 @@
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="strong">24.54% </span>
<span class="quiet">Statements</span>
<span class='fraction'>0/276</span>
<span class='fraction'>67/273</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="strong">62.16% </span>
<span class="quiet">Branches</span>
<span class='fraction'>0/6</span>
<span class='fraction'>23/37</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="strong">60% </span>
<span class="quiet">Functions</span>
<span class='fraction'>0/6</span>
<span class='fraction'>9/15</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span>
<span class="strong">24.54% </span>
<span class="quiet">Lines</span>
<span class='fraction'>0/276</span>
<span class='fraction'>67/273</span>
</div>
@@ -88,18 +88,18 @@
</tr>
<tr>
<td class="file low" data-value="CreateUserService.ts"><a href="CreateUserService.ts.html">CreateUserService.ts</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
<td class="file high" data-value="CreateUserService.ts"><a href="CreateUserService.ts.html">CreateUserService.ts</a></td>
<td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="70" class="abs low">0/70</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="70" class="abs low">0/70</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="67" class="abs high">67/67</td>
<td data-value="71.88" class="pct medium">71.88%</td>
<td data-value="32" class="abs medium">23/32</td>
<td data-value="90" class="pct high">90%</td>
<td data-value="10" class="abs high">9/10</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="67" class="abs high">67/67</td>
</tr>
<tr>
@@ -170,7 +170,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
at Thu Oct 22 2020 13:34:21 GMT-0300 (Brasilia Standard Time)
at Fri Oct 23 2020 11:53:22 GMT-0300 (Brasilia Standard Time)
</div>
</div>
<script src="../prettify.js"></script>