Skip to content

Commit 5a2e059

Browse files
committed
temp
1 parent 01a14be commit 5a2e059

16 files changed

+144
-75
lines changed

crates/apollo-smith/src/next/mod.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,23 +132,24 @@ pub(crate) fn generate_executable_document(
132132
schema: &Valid<Schema>,
133133
) -> Result<Document, Error> {
134134
let mut doc = Document::new();
135+
let mut executable_document = doc.to_executable(schema).expect("initial document must be valid");
135136
let mutations = mutations::executable_document_mutations();
136-
for count in 0..1000 {
137+
for _ in 0..1000 {
137138
if u.len() == 0 {
138139
// We ran out of data abort. This is not an error
139140
return Err(Error::Arbitrary(arbitrary::Error::NotEnoughData))?;
140141
}
141142
let mutation = u.choose(&mutations)?;
142143
let mut new_doc = doc.clone();
143144
// First let's modify the document.
144-
if !mutation.apply(u, &mut new_doc, &schema)? {
145+
if !mutation.apply(u, &mut new_doc, &schema, &executable_document)? {
145146
// The mutation didn't apply, let's try another one
146147
continue;
147148
}
148149

149150
// Now let's validate that the schema says it's OK
150151
match (mutation.is_valid(), new_doc.to_executable_validate(schema)) {
151-
(true, Ok(_)) => {
152+
(true, Ok(new_executable_document)) => {
152153
// Let's reparse the document to check that it can be parsed
153154
let reparsed = Document::parse(new_doc.to_string(), PathBuf::from("synthetic"))
154155
.map_err(|e| Error::ExecutableReparse {
@@ -166,6 +167,7 @@ pub(crate) fn generate_executable_document(
166167
}
167168

168169
doc = new_doc;
170+
executable_document = new_executable_document.into_inner();
169171
continue;
170172
}
171173
(true, Err(e)) => {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use crate::next::mutations::{ExecutableDocumentMutation, SchemaMutation};
2+
3+
use crate::next::unstructured::Unstructured;
4+
use apollo_compiler::ast::{Definition, Document};
5+
use apollo_compiler::{ExecutableDocument, Node, Schema};
6+
7+
pub(crate) struct AddAnonymousOperationDefinition;
8+
9+
impl ExecutableDocumentMutation for AddAnonymousOperationDefinition {
10+
fn apply(
11+
&self,
12+
u: &mut Unstructured,
13+
doc: &mut Document,
14+
schema: &Schema,
15+
executable_document: &ExecutableDocument,
16+
) -> arbitrary::Result<bool> {
17+
if !executable_document.named_operations.is_empty() || executable_document.anonymous_operation.is_some() {
18+
// We already have an operation, so we can't add an anonymous one
19+
return Ok(false);
20+
}
21+
doc.definitions
22+
.push(Definition::OperationDefinition(Node::new(
23+
u.arbitrary_operation_definition(schema, executable_document, None)?,
24+
)));
25+
Ok(true)
26+
}
27+
fn is_valid(&self) -> bool {
28+
true
29+
}
30+
}

crates/apollo-smith/src/next/mutations/add_directive_definition.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use apollo_compiler::ast::{Definition, Document};
22
use apollo_compiler::{Node, Schema};
33

4-
use crate::next::mutations::Mutation;
4+
use crate::next::mutations::SchemaMutation;
55
use crate::next::unstructured::Unstructured;
66

77
pub(crate) struct AddDirectiveDefinition;
8-
impl Mutation for AddDirectiveDefinition {
8+
impl SchemaMutation for AddDirectiveDefinition {
99
fn apply(
1010
&self,
1111
u: &mut Unstructured,

crates/apollo-smith/src/next/mutations/add_enum_type_definition.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use apollo_compiler::ast::{Definition, Document};
22
use apollo_compiler::{Node, Schema};
33

4-
use crate::next::mutations::Mutation;
4+
use crate::next::mutations::SchemaMutation;
55
use crate::next::unstructured::Unstructured;
66

77
pub(crate) struct AddEnumTypeDefinition;
8-
impl Mutation for AddEnumTypeDefinition {
8+
impl SchemaMutation for AddEnumTypeDefinition {
99
fn apply(
1010
&self,
1111
u: &mut Unstructured,

crates/apollo-smith/src/next/mutations/add_input_object_type_definition.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use apollo_compiler::ast::{Definition, Document};
22
use apollo_compiler::{Node, Schema};
33

4-
use crate::next::mutations::Mutation;
4+
use crate::next::mutations::SchemaMutation;
55
use crate::next::unstructured::Unstructured;
66

77
pub(crate) struct AddInputObjectTypeDefinition;
8-
impl Mutation for AddInputObjectTypeDefinition {
8+
impl SchemaMutation for AddInputObjectTypeDefinition {
99
fn apply(
1010
&self,
1111
u: &mut Unstructured,

crates/apollo-smith/src/next/mutations/add_interface_type_definition.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use apollo_compiler::ast::{Definition, Document};
22
use apollo_compiler::{Node, Schema};
33

4-
use crate::next::mutations::Mutation;
4+
use crate::next::mutations::SchemaMutation;
55
use crate::next::unstructured::Unstructured;
66

77
pub(crate) struct AddInterfaceTypeDefinition;
8-
impl Mutation for AddInterfaceTypeDefinition {
8+
impl SchemaMutation for AddInterfaceTypeDefinition {
99
fn apply(
1010
&self,
1111
u: &mut Unstructured,
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use crate::next::mutations::{ExecutableDocumentMutation, SchemaMutation};
2+
3+
use crate::next::unstructured::Unstructured;
4+
use apollo_compiler::ast::{Definition, Document};
5+
use apollo_compiler::{ExecutableDocument, Node, Schema};
6+
7+
pub(crate) struct AddNamedOperationDefinition;
8+
9+
impl ExecutableDocumentMutation for AddNamedOperationDefinition {
10+
fn apply(
11+
&self,
12+
u: &mut Unstructured,
13+
doc: &mut Document,
14+
schema: &Schema,
15+
executable_document: &ExecutableDocument,
16+
) -> arbitrary::Result<bool> {
17+
if executable_document.anonymous_operation.is_some() {
18+
// We already have an anonymous operation, so we can't add a named one
19+
return Ok(false);
20+
}
21+
let name = u.unique_name();
22+
doc.definitions
23+
.push(Definition::OperationDefinition(Node::new(
24+
u.arbitrary_operation_definition(schema, executable_document, Some(name))?,
25+
)));
26+
Ok(true)
27+
}
28+
fn is_valid(&self) -> bool {
29+
true
30+
}
31+
}

crates/apollo-smith/src/next/mutations/add_object_type_definition.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use apollo_compiler::ast::{Definition, Document};
22
use apollo_compiler::{Node, Schema};
33

4-
use crate::next::mutations::Mutation;
4+
use crate::next::mutations::SchemaMutation;
55
use crate::next::unstructured::Unstructured;
66

77
pub(crate) struct AddObjectTypeDefinition;
8-
impl Mutation for AddObjectTypeDefinition {
8+
impl SchemaMutation for AddObjectTypeDefinition {
99
fn apply(
1010
&self,
1111
u: &mut Unstructured,

crates/apollo-smith/src/next/mutations/add_operation_definition.rs

Lines changed: 0 additions & 25 deletions
This file was deleted.

crates/apollo-smith/src/next/mutations/add_schema_definition.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use apollo_compiler::ast::{Definition, Document};
22
use apollo_compiler::{Node, Schema};
33

4-
use crate::next::mutations::Mutation;
4+
use crate::next::mutations::SchemaMutation;
55
use crate::next::unstructured::Unstructured;
66

77
pub(crate) struct AddSchemaDefiniton;
8-
impl Mutation for AddSchemaDefiniton {
8+
impl SchemaMutation for AddSchemaDefiniton {
99
fn apply(
1010
&self,
1111
u: &mut Unstructured,

0 commit comments

Comments
 (0)