Skip to content

Commit 41b53fb

Browse files
committed
fix: unittest generator latest run id null
1 parent e2eb845 commit 41b53fb

File tree

5 files changed

+39
-32
lines changed

5 files changed

+39
-32
lines changed

src/mutahunter/core/controller.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,30 @@
1+
import json
12
import os
23
import time
34
from subprocess import CompletedProcess
45
from typing import Any, Dict, List, Optional
56
from uuid import uuid4
67

7-
from tqdm import tqdm
8-
from md2pdf.core import md2pdf
98
from jinja2 import Template
10-
import json
9+
from md2pdf.core import md2pdf
10+
from tqdm import tqdm
11+
1112
from mutahunter.core.analyzer import Analyzer
1213
from mutahunter.core.coverage_processor import CoverageProcessor
1314
from mutahunter.core.db import MutationDatabase
1415
from mutahunter.core.entities.config import MutationTestControllerConfig
1516
from mutahunter.core.error_parser import extract_error_message
16-
from mutahunter.core.exceptions import (
17-
CoverageAnalysisError,
18-
MutantKilledError,
19-
MutantSurvivedError,
20-
MutationTestingError,
21-
ReportGenerationError,
22-
UnexpectedTestResultError,
23-
)
17+
from mutahunter.core.exceptions import (CoverageAnalysisError,
18+
MutantKilledError, MutantSurvivedError,
19+
MutationTestingError,
20+
ReportGenerationError,
21+
UnexpectedTestResultError)
2422
from mutahunter.core.git_handler import GitHandler
2523
from mutahunter.core.io import FileOperationHandler
2624
from mutahunter.core.llm_mutation_engine import LLMMutationEngine
2725
from mutahunter.core.logger import logger
2826
from mutahunter.core.prompts.mutant_generator import (
29-
SYSTEM_PROMPT_MUTANT_ANALYSUS,
30-
USER_PROMPT_MUTANT_ANALYSIS,
31-
)
27+
SYSTEM_PROMPT_MUTANT_ANALYSUS, USER_PROMPT_MUTANT_ANALYSIS)
3228
from mutahunter.core.report import MutantReport
3329
from mutahunter.core.router import LLMRouter
3430
from mutahunter.core.runner import MutantTestRunner

src/mutahunter/core/db.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
import os
33
import sqlite3
44
from contextlib import contextmanager
5-
from typing import Any, Dict, List, Optional, Tuple
65
from datetime import datetime
6+
from typing import Any, Dict, List, Optional, Tuple
77

88

99
class DatabaseError(Exception):
@@ -502,6 +502,16 @@ def remove_mutants_by_file_version_id(self, file_version_id: int):
502502
conn.rollback()
503503
raise DatabaseError(f"Error removing mutants: {str(e)}")
504504

505+
def get_latest_run_id(self) -> Optional[int]:
506+
with self.get_connection() as conn:
507+
cursor = conn.cursor()
508+
try:
509+
cursor.execute("SELECT id FROM Runs ORDER BY id DESC LIMIT 1")
510+
result = cursor.fetchone()
511+
return result[0] if result else None
512+
except sqlite3.Error as e:
513+
raise DatabaseError(f"Error fetching latest run ID: {str(e)}")
514+
505515
def get_mutation_coverage(self) -> float:
506516
summary = self.get_mutant_summary()
507517
if not summary:

src/mutahunter/core/report.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@
33
"""
44

55
import os
6+
from importlib import resources
67
from typing import Any, Dict, List
78

8-
from jinja2 import (
9-
Environment,
10-
PackageLoader,
11-
FileSystemLoader,
12-
select_autoescape,
13-
)
14-
from importlib import resources
9+
from jinja2 import (Environment, FileSystemLoader, PackageLoader,
10+
select_autoescape)
11+
1512
from mutahunter.core.db import MutationDatabase
1613
from mutahunter.core.logger import logger
1714

src/mutahunter/core/unittest_generator.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,20 @@ def run(self) -> None:
7373
initial_line_coverage_rate = self.coverage_processor.line_coverage_rate
7474
print("Initial line coverage rate:", initial_line_coverage_rate)
7575
self.increase_line_coverage()
76-
self.mutator.run_coverage_analysis()
77-
self.mutator.run_mutation_testing()
78-
initial_mutation_coverage_rate = self.db.get_mutation_coverage()
76+
self.mutator.run()
77+
latest_run_id = self.db.get_latest_run_id()
78+
print("Latest run ID:", latest_run_id)
79+
data = self.db.get_mutant_summary(latest_run_id)
80+
initial_mutation_coverage_rate = data["mutation_coverage"]
7981
print("Initial mutation coverage rate:", initial_mutation_coverage_rate)
8082
self.increase_mutation_coverage()
8183
print(
8284
f"Line coverage increased from {initial_line_coverage_rate*100:.2f}% to {self.coverage_processor.line_coverage_rate*100:.2f}%"
8385
)
86+
data = self.db.get_mutant_summary(latest_run_id)
87+
final_mutation_coverage_rate = data["mutation_coverage"]
8488
print(
85-
f"Mutation coverage increased from {initial_mutation_coverage_rate*100:.2f}% to {self.db.get_mutation_coverage()*100:.2f}%"
89+
f"Mutation coverage increased from {initial_mutation_coverage_rate*100:.2f}% to {final_mutation_coverage_rate*100:.2f}%"
8690
)
8791

8892
def increase_line_coverage(self):
@@ -99,10 +103,12 @@ def increase_line_coverage(self):
99103

100104
def increase_mutation_coverage(self):
101105
attempt = 0
102-
106+
latest_run_id = self.db.get_latest_run_id()
107+
data = self.db.get_mutant_summary(latest_run_id)
108+
mutation_coverage_rate = data["mutation_coverage"]
103109
self.failed_unittests = []
104110
while (
105-
self.db.get_mutation_coverage() < self.config.target_mutation_coverage_rate
111+
mutation_coverage_rate < self.config.target_mutation_coverage_rate
106112
and attempt < self.config.max_attempts
107113
):
108114
attempt += 1

src/mutahunter/main.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
from mutahunter.core.controller import MutationTestController
66
from mutahunter.core.coverage_processor import CoverageProcessor
77
from mutahunter.core.db import MutationDatabase
8-
from mutahunter.core.entities.config import (
9-
MutationTestControllerConfig,
10-
UnittestGeneratorConfig,
11-
)
8+
from mutahunter.core.entities.config import (MutationTestControllerConfig,
9+
UnittestGeneratorConfig)
1210
from mutahunter.core.error_parser import extract_error_message
1311
from mutahunter.core.git_handler import GitHandler
1412
from mutahunter.core.io import FileOperationHandler

0 commit comments

Comments
 (0)