• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

geo-engine / BioIS / 26396280985

25 May 2026 10:39AM UTC coverage: 80.951% (+0.4%) from 80.558%
26396280985

Pull #14

github

web-flow
Merge 572e282ba into 25711b0ec
Pull Request #14: feat: biodiversity impact

417 of 593 branches covered (70.32%)

Branch coverage included in aggregate %.

1327 of 1684 new or added lines in 28 files covered. (78.8%)

11 existing lines in 2 files now uncovered.

3225 of 3906 relevant lines covered (82.57%)

1.85 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

71.19
/frontend/src/app/result/result.component.html
1
<div>
8✔
2
  <div class="grid-container">
3
    @for (result of results(); track result.key) {
10✔
4
      <mat-card class="dashboard-card">
2✔
5
        <mat-card-header>
6
          <mat-card-title>
7
            {{ result.title }}
2✔
8
          </mat-card-title>
2✔
9
          <button
2✔
10
            matIconButton
11
            class="more-button"
12
            [matMenuTriggerFor]="menu"
2✔
13
            aria-label="Toggle menu"
14
          >
15
            <mat-icon>more_vert</mat-icon>
2✔
16
          </button>
17
          <mat-menu #menu="matMenu" xPosition="before">
2✔
18
            <button mat-menu-item (click)="download(result.key)">Download</button>
2✔
19
          </mat-menu>
20
        </mat-card-header>
21
        <mat-card-content>
2✔
22
          @switch (result.type) {
2✔
23
            @case (ResultType.Number) {
2✔
NEW
24
              <p>{{ asNumber(result.value) | number: '1.0-2' }}</p>
×
25
            }
26
            @case (ResultType.Ndvi) {
27
              <app-number-indicator
1✔
28
                [value]="asNumber(result.value)"
1✔
29
                [min]="-1"
30
                [max]="1"
31
                [colors]="ndviColorMap"
32
              ></app-number-indicator>
33
            }
34
            @case (ResultType.Json) {
NEW
35
              <app-long-text>
×
36
                <code>
NEW
37
                  <pre>{{ result.value | json }}</pre>
×
38
                </code>
39
              </app-long-text>
40
            }
41
            @case (ResultType.Array) {
NEW
42
              <mat-list>
×
NEW
43
                @for (item of asArray(result.value); track item) {
×
NEW
44
                  <mat-list-item>
×
NEW
45
                    <span>{{ item }}</span>
×
46
                  </mat-list-item>
47
                } @empty {
NEW
48
                  <em>empty</em>
×
49
                }
NEW
50
              </mat-list>
×
51
            }
52
            @case (ResultType.JsonTable) {
53
              <table mat-table [dataSource]="asJsonTableRows(result.value)">
1✔
54
                @for (column of columns(result.value); track column.key) {
1✔
55
                  <ng-container [matColumnDef]="column.key">
4✔
56
                    <th mat-header-cell *matHeaderCellDef>{{ column.name }}</th>
4✔
57
                    @switch (column.type) {
4✔
58
                      @case (ColumnType.String) {
4✔
59
                        <td
1✔
60
                          mat-cell
61
                          *matCellDef="let element"
62
                          [innerHTML]="element[column.key].replaceAll('\n', '<br>')"
1✔
63
                        ></td>
64
                      }
65
                      @case (ColumnType.Url) {
66
                        <td mat-cell *matCellDef="let element">
1✔
67
                          <a [href]="element[column.key]" target="_blank">{{
1✔
68
                            element[column.key]
69
                          }}</a>
1✔
70
                        </td>
71
                      }
72
                      @case (ColumnType.Number) {
73
                        <td mat-cell *matCellDef="let element">
1✔
74
                          {{ element[column.key] | number: '1.0-2' }}
1✔
75
                        </td>
1✔
76
                      }
77
                      @case (ColumnType.Boolean) {
78
                        <td mat-cell *matCellDef="let element">
1✔
79
                          {{ element[column.key] ? 'True' : 'False' }}
1!
80
                        </td>
1✔
81
                      }
82
                      @case (ColumnType.List) {
NEW
83
                        <td mat-cell *matCellDef="let element">
×
84
                          <app-long-text>
85
                            <ul>
NEW
86
                              @for (item of asList(element[column.key]); track item) {
×
NEW
87
                                <li>
×
NEW
88
                                  <small>{{ item }}</small>
×
89
                                </li>
90
                              } @empty {
NEW
91
                                <em>empty</em>
×
92
                              }
NEW
93
                            </ul>
×
94
                          </app-long-text>
95
                        </td>
96
                      }
97
                      <!-- Prevent unhandled cases -->
98
                      @default never;
99
                    }
100
                  </ng-container>
101
                }
102

103
                <tr mat-header-row *matHeaderRowDef="columnKeys(result.value)"></tr>
1✔
104
                <tr mat-row *matRowDef="let row; columns: columnKeys(result.value)"></tr>
1✔
105
              </table>
1✔
106
            }
107
            @case (ResultType.String)
108
            @case (ResultType.Boolean)
109
            @default {
NEW
110
              <p>{{ result.value }}</p>
×
111
            }
112
          }
113
        </mat-card-content>
2✔
114
      </mat-card>
115
    }
116
  </div>
8✔
117
</div>
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc