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

sonus21 / rqueue / 25600722838

09 May 2026 12:06PM UTC coverage: 83.396% (-5.3%) from 88.677%
25600722838

push

github

web-flow
Nats v2 web (#295)

* ci: compile main sources in coverage_report job

The coverage_report job was producing an effectively empty
jacocoTestReport.xml (3.4KB vs ~1.1MB locally) because no .class files
existed when coverageReportOnly ran — the job checked out source code
and downloaded .exec artifacts, but never compiled. JaCoCo's report
generator skips packages/classes it cannot resolve, so the merged XML
ended up with only <sessioninfo> entries and no <package> elements.

That made coverallsJacoco silently no-op via the
"source file set empty, skipping" branch in CoverallsReporter, so
"Push coverage to Coveralls" reported success without uploading.

Verified by downloading the coverage-report artifact from a recent run
and comparing its XML structure against a local build's report.

Assisted-By: Claude Code

* nats-web: implement pause / soft-delete admin ops and capability-aware Q-detail

Replace the all-stub `NatsRqueueUtilityService` with real impls for the operations
JetStream can model: `pauseUnpauseQueue` persists the `paused` flag on `QueueConfig`
in the queue-config KV bucket and notifies the local listener container so the poller
stops dispatching; `deleteMessage` is a soft delete via `MessageMetadataService`
(stream message persists, dashboard hides via the metadata flag); `getDataType`
reports `STREAM`. `moveMessage`, `enqueueMessage`, and `makeEmpty` deliberately
remain "not supported" — there is no JetStream primitive for those.

Update `RqueueQDetailServiceImpl.getRunningTasks` / `getScheduledTasks` to return
header-only tables when the broker capabilities suppress those sections, instead of
emitting zero rows or 501s on NATS.

20 new unit tests cover the pause/delete paths and lock in the still-unsupported
operations. Updates `nats-task.md` / `nats-task-v2.md` to reflect what landed.

Assisted-By: Claude Code

* nats-web: capability-aware nav / charts and stream-based peek

End-to-end browser-tested the NATS dashboard and shipped the t... (continued)

2566 of 3407 branches covered (75.32%)

Branch coverage included in aggregate %.

795 of 1072 new or added lines in 22 files covered. (74.16%)

312 existing lines in 38 files now uncovered.

7715 of 8921 relevant lines covered (86.48%)

0.86 hits per line

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

93.83
/rqueue-core/src/main/java/com/github/sonus21/rqueue/utils/StringUtils.java
1
/*
2
 * Copyright (c) 2020-2026 Sonu Kumar
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * You may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *     https://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and limitations under the License.
14
 *
15
 */
16

17
package com.github.sonus21.rqueue.utils;
18

19
import java.beans.Introspector;
20

21
public final class StringUtils {
22

23
  StringUtils() {}
×
24

25
  public static boolean isEmpty(String string) {
26
    if (string == null) {
1✔
27
      return true;
1✔
28
    }
29
    return string.isEmpty();
1✔
30
  }
31

32
  public static String clean(String string) {
33
    if (string == null) {
1✔
34
      return null;
1✔
35
    }
36
    return string.trim();
1✔
37
  }
38

39
  public static boolean isAlpha(Character c) {
40
    return Character.isUpperCase(c) || Character.isLowerCase(c);
1✔
41
  }
42

43
  public static String getBeanName(String queueName) {
44
    String beanName = convertToCamelCase(queueName);
1✔
45
    if (beanName.isEmpty()) {
1✔
46
      return getBeanName("bean" + queueName);
1✔
47
    }
48
    return beanName;
1✔
49
  }
50

51
  public static String convertToCamelCase(String string) {
52
    String txt = clean(string);
1✔
53
    if (isEmpty(txt)) {
1✔
54
      throw new IllegalArgumentException("string is empty");
1✔
55
    }
56
    StringBuilder sb = new StringBuilder();
1✔
57
    boolean seenAlpha = false;
1✔
58
    for (int i = 0; i < txt.length(); i++) {
1✔
59
      char c = txt.charAt(i);
1✔
60
      if (isAlpha(c)) {
1✔
61
        seenAlpha = true;
1✔
62
        if (i == 0) {
1✔
63
          sb.append(c);
1✔
64
        } else if (!isAlpha(txt.charAt(i - 1))) {
1✔
65
          sb.append(Character.toUpperCase(c));
1✔
66
        } else if (Character.isLowerCase(c)
1✔
67
            || (Character.isUpperCase(c) && Character.isLowerCase(txt.charAt(i - 1)))) {
1!
68
          sb.append(c);
1✔
69
        } else {
70
          sb.append(Character.toLowerCase(c));
1✔
71
        }
72
      } else if (seenAlpha && Character.isDigit(c)) {
1✔
73
        sb.append(c);
1✔
74
      }
75
    }
76
    String convertedTxt = sb.toString();
1✔
77
    if (convertedTxt.isEmpty()) {
1✔
78
      return convertedTxt;
1✔
79
    }
80
    return Introspector.decapitalize(convertedTxt);
1✔
81
  }
82

83
  public static String groupName(String name) {
84
    String groupName = convertToCamelCase(name);
1✔
85
    if (groupName.isEmpty()) {
1✔
86
      return groupName("Group" + name);
1✔
87
    }
88
    if (isAlpha(groupName.charAt(0)) && Character.isLowerCase(groupName.charAt(0))) {
1!
89
      char[] chars = groupName.toCharArray();
1✔
90
      chars[0] = Character.toUpperCase(chars[0]);
1✔
91
      return new String(chars);
1✔
92
    }
UNCOV
93
    return groupName;
×
94
  }
95
}
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