Files
bambuddy/frontend/coverage/index.html
T
maziggy ff53e62ef8 Add comprehensive automated testing infrastructure
Backend:
  - pytest configuration with async support and coverage
  - Unit tests for notification service (23 tests)
  - Unit tests for smart plug manager (12 tests)
  - Unit tests for archive service (16 tests)
  - Integration tests for API endpoints
  - Fix: notifications now send immediately (digest is summary only)

  Frontend:
  - Vitest configuration with jsdom and coverage
  - MSW for API mocking
  - Component tests for Toggle, Button, Card, ConfirmModal (77 tests)
  - Test utilities with custom render wrapper

  CI/CD:
  - GitHub Actions workflow for automated testing
  - Backend lint, unit tests, integration tests
  - Frontend lint, type-check, unit tests, build
2025-12-11 10:03:40 +01:00

236 lines
9.5 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for All files</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>All files</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">2.88% </span>
<span class="quiet">Statements</span>
<span class='fraction'>594/20569</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">41.73% </span>
<span class="quiet">Branches</span>
<span class='fraction'>53/127</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">7.06% </span>
<span class="quiet">Functions</span>
<span class='fraction'>19/269</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">2.88% </span>
<span class="quiet">Lines</span>
<span class='fraction'>594/20569</span>
</div>
</div>
<p class="quiet">
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>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line low'></div>
<div class="pad1">
<table class="coverage-summary">
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file low" data-value="src"><a href="src/index.html">src</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>
<td data-value="0" class="pct low">0%</td>
<td data-value="56" class="abs low">0/56</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="56" class="abs low">0/56</td>
</tr>
<tr>
<td class="file low" data-value="src/api"><a href="src/api/index.html">src/api</a></td>
<td data-value="27.54" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 27%"></div><div class="cover-empty" style="width: 73%"></div></div>
</td>
<td data-value="27.54" class="pct low">27.54%</td>
<td data-value="679" class="abs low">187/679</td>
<td data-value="75" class="pct medium">75%</td>
<td data-value="4" class="abs medium">3/4</td>
<td data-value="1.76" class="pct low">1.76%</td>
<td data-value="170" class="abs low">3/170</td>
<td data-value="27.54" class="pct low">27.54%</td>
<td data-value="679" class="abs low">187/679</td>
</tr>
<tr>
<td class="file low" data-value="src/components"><a href="src/components/index.html">src/components</a></td>
<td data-value="3.65" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 3%"></div><div class="cover-empty" style="width: 97%"></div></div>
</td>
<td data-value="3.65" class="pct low">3.65%</td>
<td data-value="9626" class="abs low">352/9626</td>
<td data-value="46" class="pct low">46%</td>
<td data-value="100" class="abs low">46/100</td>
<td data-value="18.66" class="pct low">18.66%</td>
<td data-value="75" class="abs low">14/75</td>
<td data-value="3.65" class="pct low">3.65%</td>
<td data-value="9626" class="abs low">352/9626</td>
</tr>
<tr>
<td class="file low" data-value="src/components/icons"><a href="src/components/icons/index.html">src/components/icons</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>
<td data-value="0" class="pct low">0%</td>
<td data-value="44" class="abs low">0/44</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="44" class="abs low">0/44</td>
</tr>
<tr>
<td class="file medium" data-value="src/contexts"><a href="src/contexts/index.html">src/contexts</a></td>
<td data-value="60.22" class="pic medium">
<div class="chart"><div class="cover-fill" style="width: 60%"></div><div class="cover-empty" style="width: 40%"></div></div>
</td>
<td data-value="60.22" class="pct medium">60.22%</td>
<td data-value="88" class="abs medium">53/88</td>
<td data-value="66.66" class="pct medium">66.66%</td>
<td data-value="6" class="abs medium">4/6</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="6" class="abs low">2/6</td>
<td data-value="60.22" class="pct medium">60.22%</td>
<td data-value="88" class="abs medium">53/88</td>
</tr>
<tr>
<td class="file low" data-value="src/hooks"><a href="src/hooks/index.html">src/hooks</a></td>
<td data-value="1.33" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 1%"></div><div class="cover-empty" style="width: 99%"></div></div>
</td>
<td data-value="1.33" class="pct low">1.33%</td>
<td data-value="150" class="abs low">2/150</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="3" class="abs low">0/3</td>
<td data-value="1.33" class="pct low">1.33%</td>
<td data-value="150" class="abs low">2/150</td>
</tr>
<tr>
<td class="file low" data-value="src/i18n"><a href="src/i18n/index.html">src/i18n</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>
<td data-value="0" class="pct low">0%</td>
<td data-value="29" class="abs low">0/29</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="29" class="abs low">0/29</td>
</tr>
<tr>
<td class="file low" data-value="src/i18n/locales"><a href="src/i18n/locales/index.html">src/i18n/locales</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>
<td data-value="0" class="pct low">0%</td>
<td data-value="666" class="abs low">0/666</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="666" class="abs low">0/666</td>
</tr>
<tr>
<td class="file low" data-value="src/pages"><a href="src/pages/index.html">src/pages</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>
<td data-value="0" class="pct low">0%</td>
<td data-value="9231" class="abs low">0/9231</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="10" class="abs low">0/10</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="10" class="abs low">0/10</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="9231" class="abs low">0/9231</td>
</tr>
</tbody>
</table>
</div>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2025-12-11T08:38:30.022Z
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="sorter.js"></script>
<script src="block-navigation.js"></script>
</body>
</html>