Skip to content

Commit

Permalink
feat: Add new generator for job titles
Browse files Browse the repository at this point in the history
  • Loading branch information
en-milie committed Oct 23, 2024
1 parent 6a9eec4 commit f229786
Show file tree
Hide file tree
Showing 2 changed files with 128 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package com.endava.cats.generator.format.impl;

import com.endava.cats.generator.format.api.OpenAPIFormat;
import com.endava.cats.generator.format.api.PropertySanitizer;
import com.endava.cats.generator.format.api.ValidDataFormatGenerator;
import com.endava.cats.util.CatsUtil;
import io.swagger.v3.oas.models.media.Schema;
import jakarta.inject.Singleton;

import java.util.List;

/**
* Generates random job titles.
*/
@Singleton
public class JobTitleGenerator implements ValidDataFormatGenerator, OpenAPIFormat {
static final List<String> JOB_TITLES = List.of(
"Software Engineer",
"Data Scientist",
"Product Manager",
"UX Designer",
"Quality Assurance Analyst",
"Systems Administrator",
"Network Engineer",
"Business Analyst",
"Technical Writer",
"Project Manager",
"Database Administrator",
"DevOps Engineer",
"Registered Nurse",
"Mechanical Engineer",
"Financial Analyst",
"Teacher",
"Graphic Designer",
"Marketing Manager",
"Civil Engineer",
"Chef",
"Sales Representative",
"Human Resources Specialist",
"Electrician",
"Pharmacist",
"Architect",
"Journalist",
"Accountant",
"Lawyer",
"Environmental Scientist",
"Physician",
"Social Worker",
"Police Officer",
"Pilot",
"Veterinarian",
"Data Analyst",
"Automotive Technician",
"Dentist",
"Construction Manager",
"Musician",
"Event Planner",
"Fitness Trainer",
"Security Analyst",
"Mobile App Developer",
"Cloud Architect",
"IT Support Specialist",
"Frontend Developer",
"Backend Developer",
"Full Stack Developer",
"Machine Learning Engineer",
"Blockchain Developer",
"Artificial Intelligence Specialist",
"Cybersecurity Specialist",
"Digital Marketing Manager",
"SEO Specialist",
"Content Strategist",
"Game Developer",
"Data Engineer",
"Site Reliability Engineer",
"Hardware Engineer"
);
private static final String JOB_TITLE_WORD = "jobtitle";

@Override
public Object generate(Schema<?> schema) {
return CatsUtil.selectRandom(JOB_TITLES);
}

@Override
public boolean appliesTo(String format, String propertyName) {
return JOB_TITLE_WORD.equalsIgnoreCase(PropertySanitizer.sanitize(format)) ||
PropertySanitizer.sanitize(propertyName).equalsIgnoreCase(JOB_TITLE_WORD);
}

@Override
public List<String> matchingFormats() {
return List.of("jobTitle", "job-title", "job_title");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.endava.cats.generator.format.impl;

import io.quarkus.test.junit.QuarkusTest;
import io.swagger.v3.oas.models.media.Schema;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

@QuarkusTest
class JobTitleGeneratorTest {

@Test
void shouldGenerate() {
JobTitleGenerator jobTitleGenerator = new JobTitleGenerator();
Assertions.assertThat(jobTitleGenerator.generate(new Schema<>()).toString()).containsAnyOf(
JobTitleGenerator.JOB_TITLES.toArray(new String[0]));
}

@ParameterizedTest
@CsvSource({"jobTitle,true", "other,false", "job-title,true"})
void shouldApplyToFormat(String format, boolean expected) {
JobTitleGenerator jobTitleGenerator = new JobTitleGenerator();
Assertions.assertThat(jobTitleGenerator.appliesTo(format, "")).isEqualTo(expected);
}

@ParameterizedTest
@CsvSource({"jobTitle,true", "JobTitle,true", "other,false"})
void shouldApplyToPropertyName(String property, boolean expected) {
JobTitleGenerator jobTitleGenerator = new JobTitleGenerator();
Assertions.assertThat(jobTitleGenerator.appliesTo("", property)).isEqualTo(expected);
}
}

0 comments on commit f229786

Please sign in to comment.