Comprehensive developer toolkit providing reusable skills for Java/Spring Boot, TypeScript/NestJS/React/Next.js, Python, PHP, AWS CloudFormation, AI/RAG, DevOps, and more.
90
90%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Risky
Do not use without reviewing
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import software.amazon.awssdk.services.lambda.LambdaClient;
import software.amazon.awssdk.services.lambda.model.InvokeResponse;
import software.amazon.awssdk.core.SdkBytes;
import static org.mockito.Mockito.*;
import static org.assertj.core.api.Assertions.*;
@ExtendWith(MockitoExtension.class)
class LambdaInvokerServiceTest {
@Mock
private LambdaClient lambdaClient;
@Mock
private ObjectMapper objectMapper;
@InjectMocks
private LambdaInvokerService service;
@Test
void shouldInvokeLambdaSuccessfully() throws Exception {
// Arrange
String functionName = "test-function";
OrderRequest request = new OrderRequest("123", List.of());
String jsonPayload = "{\"orderId\":\"123\",\"items\":[]}";
String jsonResponse = "{\"status\":\"SUCCESS\"}";
when(objectMapper.writeValueAsString(request)).thenReturn(jsonPayload);
when(objectMapper.readValue(jsonResponse, OrderResponse.class))
.thenReturn(new OrderResponse("SUCCESS"));
InvokeResponse invokeResponse = InvokeResponse.builder()
.statusCode(200)
.payload(SdkBytes.fromUtf8String(jsonResponse))
.build();
when(lambdaClient.invoke(any(InvokeRequest.class))).thenReturn(invokeResponse);
// Act
OrderResponse response = service.invoke(functionName, request, OrderResponse.class);
// Assert
assertThat(response.getStatus()).isEqualTo("SUCCESS");
InvokeRequest expectedRequest = InvokeRequest.builder()
.functionName(functionName)
.payload(SdkBytes.fromUtf8String(jsonPayload))
.build();
verify(lambdaClient).invoke(expectedRequest);
}
@Test
void shouldHandleLambdaFunctionError() throws Exception {
// Arrange
String functionName = "test-function";
OrderRequest request = new OrderRequest("123", List.of());
String jsonPayload = "{\"orderId\":\"123\",\"items\":[]}";
String errorResponse = "{\"error\":\"Invalid input\"}";
when(objectMapper.writeValueAsString(request)).thenReturn(jsonPayload);
InvokeResponse invokeResponse = InvokeResponse.builder()
.statusCode(200)
.functionError("Unhandled")
.payload(SdkBytes.fromUtf8String(errorResponse))
.build();
when(lambdaClient.invoke(any(InvokeRequest.class))).thenReturn(invokeResponse);
// Act & Assert
assertThatThrownBy(() -> service.invoke(functionName, request, OrderResponse.class))
.isInstanceOf(LambdaInvocationException.class)
.hasMessageContaining("Lambda function error");
}
@Test
void shouldHandleServiceException() {
// Arrange
String functionName = "test-function";
OrderRequest request = new OrderRequest("123", List.of());
when(lambdaClient.invoke(any(InvokeRequest.class)))
.thenThrow(new LambdaException("Service unavailable"));
// Act & Assert
assertThatThrownBy(() -> service.invoke(functionName, request, OrderResponse.class))
.isInstanceOf(RuntimeException.class)
.hasMessageContaining("Failed to invoke Lambda function");
}
}import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import static org.assertj.core.api.Assertions.*;
@SpringBootTest
@ActiveProfiles("test")
class LambdaInvokerServiceIntegrationTest {
@Autowired
private LambdaInvokerService lambdaInvoker;
@Test
void shouldInvokeRealLambdaFunction() {
// Arrange
String functionName = "test-function";
TestRequest request = new TestRequest("test-data");
// Act
TestResponse response = lambdaInvoker.invoke(functionName, request, TestResponse.class);
// Assert
assertThat(response).isNotNull();
assertThat(response.getStatus()).isEqualTo("SUCCESS");
}
}import org.testcontainers.containers.localstack.LocalStackContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.utility.DockerImageName;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.lambda.LambdaClient;
@SpringBootTest
@Testcontainers
class LambdaLocalStackTest {
@Container
static LocalStackContainer localstack = new LocalStackContainer(
DockerImageName.parse("localstack/localstack:latest"))
.withServices(LocalStackContainer.Service.LAMBDA);
@DynamicPropertySource
static void configureProperties(DynamicPropertyRegistry registry) {
registry.add("aws.endpoint", localstack::getEndpoint);
registry.add("aws.region", () -> "us-east-1");
}
@Bean
public LambdaClient lambdaClient() {
return LambdaClient.builder()
.endpointOverride(URI.create(localstack.getEndpoint()))
.region(Region.US_EAST_1)
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create("test", "test")))
.build();
}
}@ExtendWith(MockitoExtension.class)
class AsyncLambdaServiceTest {
@Mock
private LambdaAsyncClient asyncClient;
@InjectMocks
private AsyncLambdaService asyncService;
@Test
void shouldInvokeLambdaAsync() throws Exception {
// Arrange
String functionName = "test-function";
String payload = "{\"test\":\"data\"}";
CompletableFuture<InvokeResponse> future = CompletableFuture.completedFuture(
InvokeResponse.builder()
.statusCode(202)
.payload(SdkBytes.fromUtf8String("{\"status\":\"accepted\"}"))
.build()
);
when(asyncClient.invoke(any(InvokeRequest.class))).thenReturn(future);
// Act
CompletableFuture<String> result = asyncService.invokeAsync(functionName, payload);
// Assert
assertThat(result.get()).contains("accepted");
}
}@Test
void shouldHandleTimeout() {
// Arrange
when(lambdaClient.invoke(any(InvokeRequest.class)))
.thenAnswer(invocation -> {
Thread.sleep(5000); // Simulate timeout
return InvokeResponse.builder().build();
});
// Act & Assert
assertThatThrownBy(() -> service.invoke("function", request, Response.class))
.isInstanceOf(RuntimeException.class);
}
@Test
void shouldRetryOnTransientFailure() {
// Arrange
when(lambdaClient.invoke(any(InvokeRequest.class)))
.thenThrow(new LambdaException("Service unavailable"))
.thenReturn(InvokeResponse.builder()
.statusCode(200)
.payload(SdkBytes.fromUtf8String("{\"status\":\"ok\"}"))
.build());
// Act
Response response = service.invokeWithRetry("function", request, Response.class, 3);
// Assert
assertThat(response.getStatus()).isEqualTo("ok");
verify(lambdaClient, times(2)).invoke(any(InvokeRequest.class));
}class LambdaTestFixture {
public static InvokeResponse successResponse(String payload) {
return InvokeResponse.builder()
.statusCode(200)
.payload(SdkBytes.fromUtf8String(payload))
.build();
}
public static InvokeResponse errorResponse(String error) {
return InvokeResponse.builder()
.statusCode(200)
.functionError("Handled")
.payload(SdkBytes.fromUtf8String("{\"error\":\"" + error + "\"}"))
.build();
}
public static InvokeRequest invokeRequest(String functionName, String payload) {
return InvokeRequest.builder()
.functionName(functionName)
.payload(SdkBytes.fromUtf8String(payload))
.build();
}
}docs
plugins
developer-kit-ai
developer-kit-aws
agents
docs
skills
aws
aws-cli-beast
aws-cost-optimization
aws-drawio-architecture-diagrams
aws-sam-bootstrap
aws-cloudformation
aws-cloudformation-auto-scaling
aws-cloudformation-bedrock
aws-cloudformation-cloudfront
aws-cloudformation-cloudwatch
aws-cloudformation-dynamodb
aws-cloudformation-ec2
aws-cloudformation-ecs
aws-cloudformation-elasticache
references
aws-cloudformation-iam
references
aws-cloudformation-lambda
aws-cloudformation-rds
aws-cloudformation-s3
aws-cloudformation-security
aws-cloudformation-task-ecs-deploy-gh
aws-cloudformation-vpc
references
developer-kit-core
agents
commands
skills
developer-kit-devops
developer-kit-java
agents
commands
docs
skills
aws-lambda-java-integration
aws-rds-spring-boot-integration
aws-sdk-java-v2-bedrock
aws-sdk-java-v2-core
aws-sdk-java-v2-dynamodb
aws-sdk-java-v2-kms
aws-sdk-java-v2-lambda
aws-sdk-java-v2-messaging
aws-sdk-java-v2-rds
aws-sdk-java-v2-s3
aws-sdk-java-v2-secrets-manager
clean-architecture
graalvm-native-image
langchain4j-ai-services-patterns
references
langchain4j-mcp-server-patterns
references
langchain4j-rag-implementation-patterns
references
langchain4j-spring-boot-integration
langchain4j-testing-strategies
langchain4j-tool-function-calling-patterns
langchain4j-vector-stores-configuration
references
qdrant
references
spring-ai-mcp-server-patterns
spring-boot-actuator
spring-boot-cache
spring-boot-crud-patterns
spring-boot-dependency-injection
spring-boot-event-driven-patterns
spring-boot-openapi-documentation
spring-boot-project-creator
spring-boot-resilience4j
spring-boot-rest-api-standards
spring-boot-saga-pattern
spring-boot-security-jwt
assets
references
scripts
spring-boot-test-patterns
spring-data-jpa
references
spring-data-neo4j
references
unit-test-application-events
unit-test-bean-validation
unit-test-boundary-conditions
unit-test-caching
unit-test-config-properties
references
unit-test-controller-layer
unit-test-exception-handler
references
unit-test-json-serialization
unit-test-mapper-converter
references
unit-test-parameterized
unit-test-scheduled-async
references
unit-test-service-layer
references
unit-test-utility-methods
unit-test-wiremock-rest-api
references
developer-kit-php
developer-kit-project-management
developer-kit-python
developer-kit-specs
commands
docs
hooks
test-templates
tests
skills
developer-kit-tools
developer-kit-typescript
agents
docs
hooks
rules
skills
aws-cdk
aws-lambda-typescript-integration
better-auth
clean-architecture
drizzle-orm-patterns
dynamodb-toolbox-patterns
references
nestjs
nestjs-best-practices
nestjs-code-review
nestjs-drizzle-crud-generator
nextjs-app-router
nextjs-authentication
nextjs-code-review
nextjs-data-fetching
nextjs-deployment
nextjs-performance
nx-monorepo
react-code-review
react-patterns
shadcn-ui
tailwind-css-patterns
tailwind-design-system
references
turborepo-monorepo
typescript-docs
typescript-security-review
zod-validation-utilities
references
github-spec-kit