Add smoke tests for opencode-rails
14 tests across 4 files covering the gem's public surface:
test/opencode/loading_test.rb (5 tests)
- All 12 gem-provided constants resolve after require
- Transitively-loaded opencode-ruby constants are present
- Opencode::Session source_location points at this gem
- Opencode::Client source_location points at opencode-ruby
- Opencode::Rails::VERSION matches semver
test/opencode/error_reporter_test.rb (3 tests)
- report is no-op without adapter (returns nil)
- report forwards error + opts to adapter
- report works with no kwargs
test/opencode/exchange_test.rb (3 tests)
- Initializes with empty / nil / Array(coerced) messages
- tool_artifacts(exclude:) doesn't raise on empty input
test/opencode/artifact_test.rb (3 tests)
- Filename/content/content_type/metadata readers
- metadata defaults to {} when omitted
- Trust metadata round-trips
Behavioral tests for Session/Turn/MessageArtifacts (AR + ActiveStorage
fixtures) stay in the host application (ajent-rails) where the
integration environment exists. Same pattern as opencode-ruby:
- gem smoke tests prove load-time correctness
- host tests prove integration correctness
This commit is contained in:
54
test/opencode/loading_test.rb
Normal file
54
test/opencode/loading_test.rb
Normal file
@@ -0,0 +1,54 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "test_helper"
|
||||
|
||||
# Smoke test: every constant the gem promises is defined and points at
|
||||
# the right kind of object. If require "opencode-rails" loads cleanly,
|
||||
# this passes. If the require chain drifts or a file fails to load,
|
||||
# this catches it before downstream apps do.
|
||||
class Opencode::LoadingTest < Minitest::Test
|
||||
GEM_PROVIDED_CONSTANTS = %w[
|
||||
Session Turn Exchange Artifact Sandbox SandboxFile
|
||||
Transform Impostor MessageArtifacts UploadedFilesPrompt
|
||||
ToolDisplay ErrorReporter
|
||||
].freeze
|
||||
|
||||
# Reply / Tracer / Client / etc. ship in opencode-ruby and are
|
||||
# transitively required by opencode-rails' umbrella. Verify the
|
||||
# require chain pulled them in.
|
||||
TRANSITIVE_CONSTANTS_FROM_OPENCODE_RUBY = %w[
|
||||
Client Reply ReplyObserver Tracer Prompts
|
||||
ResponseParser ToolPart PartSource Todo
|
||||
Instrumentation Error
|
||||
].freeze
|
||||
|
||||
def test_gem_provides_expected_constants
|
||||
GEM_PROVIDED_CONSTANTS.each do |name|
|
||||
assert Opencode.const_defined?(name),
|
||||
"Expected Opencode::#{name} to be defined after `require \"opencode-rails\"`"
|
||||
end
|
||||
end
|
||||
|
||||
def test_transitively_loads_opencode_ruby_constants
|
||||
TRANSITIVE_CONSTANTS_FROM_OPENCODE_RUBY.each do |name|
|
||||
assert Opencode.const_defined?(name),
|
||||
"Expected Opencode::#{name} to be defined transitively via opencode-ruby"
|
||||
end
|
||||
end
|
||||
|
||||
def test_session_constant_points_at_this_gem
|
||||
location = Opencode::Session.instance_method(:initialize).source_location.first
|
||||
assert_match %r{/opencode-rails/}, location,
|
||||
"Expected Opencode::Session to be loaded from opencode-rails, got: #{location}"
|
||||
end
|
||||
|
||||
def test_client_constant_points_at_opencode_ruby
|
||||
location = Opencode::Client.instance_method(:initialize).source_location.first
|
||||
assert_match %r{/opencode-ruby/}, location,
|
||||
"Expected Opencode::Client to come from opencode-ruby, got: #{location}"
|
||||
end
|
||||
|
||||
def test_version_constant
|
||||
assert_match(/\A\d+\.\d+\.\d+/, Opencode::Rails::VERSION)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user