diff --git a/app/src/main/java/me/ghui/v2er/network/bean/DailyInfo.java b/app/src/main/java/me/ghui/v2er/network/bean/DailyInfo.java index 08cb66b6..b52552e7 100644 --- a/app/src/main/java/me/ghui/v2er/network/bean/DailyInfo.java +++ b/app/src/main/java/me/ghui/v2er/network/bean/DailyInfo.java @@ -26,6 +26,22 @@ public boolean hadCheckedIn() { } public String getCheckinDays() { + if (Check.isEmpty(continuousLoginDayStr)) return ""; + + // Extract consecutive days from strings like: + // "您已连续登录 123 天" + // "ghui 已连续签到 12 天 2024/12/25" + // "用户161290已连续签到 5 天" + + // Use regex to find number followed by "天" (days) + java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("(\\d+)\\s*天"); + java.util.regex.Matcher matcher = pattern.matcher(continuousLoginDayStr); + + if (matcher.find()) { + return matcher.group(1); + } + + // Fallback to extracting all digits if pattern not found return Utils.extractDigits(continuousLoginDayStr); } diff --git a/app/src/test/java/me/ghui/v2er/network/bean/DailyInfoTest.java b/app/src/test/java/me/ghui/v2er/network/bean/DailyInfoTest.java new file mode 100644 index 00000000..de3f525e --- /dev/null +++ b/app/src/test/java/me/ghui/v2er/network/bean/DailyInfoTest.java @@ -0,0 +1,69 @@ +package me.ghui.v2er.network.bean; + +import org.junit.Test; +import static org.junit.Assert.*; + +public class DailyInfoTest { + + @Test + public void testGetCheckinDays_withValidFormat() { + // Test case 1: Standard format + DailyInfo dailyInfo = new DailyInfo(); + dailyInfo.continuousLoginDayStr = "您已连续登录 123 天"; + assertEquals("123", dailyInfo.getCheckinDays()); + } + + @Test + public void testGetCheckinDays_withDateInString() { + // Test case 2: String contains date and other numbers + DailyInfo dailyInfo = new DailyInfo(); + // Simulate the actual problematic string that might appear + dailyInfo.continuousLoginDayStr = "ghui 已连续签到 12 天 2024/12/25"; + String result = dailyInfo.getCheckinDays(); + // After fix, it should correctly extract "12" + assertEquals("12", result); + } + + @Test + public void testGetCheckinDays_withUserId() { + // Test case 3: String contains user ID and days + DailyInfo dailyInfo = new DailyInfo(); + dailyInfo.continuousLoginDayStr = "用户161290已连续签到 5 天"; + String result = dailyInfo.getCheckinDays(); + // After fix, it should correctly extract "5" + assertEquals("5", result); + } + + @Test + public void testGetCheckinDays_withNull() { + DailyInfo dailyInfo = new DailyInfo(); + dailyInfo.continuousLoginDayStr = null; + assertEquals("", dailyInfo.getCheckinDays()); + } + + @Test + public void testGetCheckinDays_withEmpty() { + DailyInfo dailyInfo = new DailyInfo(); + dailyInfo.continuousLoginDayStr = ""; + assertEquals("", dailyInfo.getCheckinDays()); + } + + // Make continuousLoginDayStr accessible for testing + private static class DailyInfo extends me.ghui.v2er.network.bean.DailyInfo { + String continuousLoginDayStr; + + @Override + public String getCheckinDays() { + // Use reflection to set the field for testing purposes + try { + java.lang.reflect.Field field = me.ghui.v2er.network.bean.DailyInfo.class.getDeclaredField("continuousLoginDayStr"); + field.setAccessible(true); + field.set(this, continuousLoginDayStr); + } catch (NoSuchFieldException | IllegalAccessException e) { + // Fail the test explicitly if reflection fails + throw new RuntimeException("Failed to access continuousLoginDayStr via reflection: " + e.getMessage(), e); + } + return super.getCheckinDays(); + } + } +} \ No newline at end of file