package com.resumeparser.processor; import com.resumeparser.model.Candidate; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.List; import static org.junit.jupiter.api.Assertions.*; class CertExtractorTest { private CertExtractor certExtractor; @BeforeEach void setUp() { certExtractor = new CertExtractor(); } @Test void testLongTitleWithMonthAndYearDoesNotMergeMonthIntoTitle() { String input = "• AWS Certified Solutions Architect - Professional - Amazon Web Services, May 2023"; List certs = certExtractor.extractCertifications(input); assertEquals(1, certs.size()); Candidate.Certification cert = certs.get(0); assertEquals("AWS Certified Solutions Architect - Professional", cert.getName()); assertEquals("Amazon Web Services", cert.getIssuer()); assertEquals("May 2023", cert.getDate()); } @Test void testLongTitleWithoutDelimiterBeforeDate() { String input = "• Advanced Machine Learning and Deep Neural Networks Specialization September 2022"; List certs = certExtractor.extractCertifications(input); assertEquals(1, certs.size()); Candidate.Certification cert = certs.get(0); assertEquals("Advanced Machine Learning and Deep Neural Networks Specialization", cert.getName()); assertEquals("September 2022", cert.getDate()); assertFalse(cert.getName().contains("September"), "Month should not be merged into title"); } @Test void testMultiLineWrappedTitleWithBullet() { String input = "• Google Cloud Certified Professional Cloud Security Engineer\n" + " Google Cloud\n" + " Issued: October 2023\n" + " Credential ID: GCE-987654"; List certs = certExtractor.extractCertifications(input); assertEquals(1, certs.size()); Candidate.Certification cert = certs.get(0); assertEquals("Google Cloud Certified Professional Cloud Security Engineer", cert.getName()); assertEquals("Google Cloud", cert.getIssuer()); assertEquals("October 2023", cert.getDate()); assertEquals("GCE-987654", cert.getCredentialId()); } @Test void testDateInParenthesesAndRange() { String input = "• Certified Information Systems Security Professional (CISSP) (May 2021 - May 2024)"; List certs = certExtractor.extractCertifications(input); assertEquals(1, certs.size()); Candidate.Certification cert = certs.get(0); assertEquals("Certified Information Systems Security Professional (CISSP)", cert.getName()); assertEquals("May 2021 - May 2024", cert.getDate()); assertFalse(cert.getName().contains("May"), "Month should not be merged into title"); } @Test void testNumericMonthAndLink() { String input = "• HashiCorp Certified: Terraform Associate (003) - HashiCorp, 04/2023\n" + " https://www.credly.com/badges/abc-123"; List certs = certExtractor.extractCertifications(input); assertEquals(1, certs.size()); Candidate.Certification cert = certs.get(0); assertEquals("HashiCorp Certified: Terraform Associate (003)", cert.getName()); assertEquals("HashiCorp", cert.getIssuer()); assertEquals("04/2023", cert.getDate()); assertEquals("https://www.credly.com/badges/abc-123", cert.getLink()); } @Test void testMultipleCertifications() { String input = "• Meta Front-End Developer Professional Certificate - Coursera - August 2022\n" + "• Certified Kubernetes Administrator (CKA) - Linux Foundation - Jan 2023"; List certs = certExtractor.extractCertifications(input); assertEquals(2, certs.size()); assertEquals("Meta Front-End Developer Professional Certificate", certs.get(0).getName()); assertEquals("Coursera", certs.get(0).getIssuer()); assertEquals("August 2022", certs.get(0).getDate()); assertEquals("Certified Kubernetes Administrator (CKA)", certs.get(1).getName()); assertEquals("Linux Foundation", certs.get(1).getIssuer()); assertEquals("Jan 2023", certs.get(1).getDate()); } }