Skip to main content
Glama

Convex MCP server

Official
by get-convex
tests.rs4.29 kB
use std::{ mem, ops::Deref, }; use crate::{ assert_obj, obj, ConvexObject, ConvexValue, ResolvedDocumentId, Size, }; #[test] fn test_value_size() -> anyhow::Result<()> { // Feel free to change this, but it's good to be aware of how large our values // are. assert_eq!(mem::size_of::<ConvexValue>(), 56); assert_eq!(mem::size_of::<ConvexValue>(), 56); // Changing the computed size of a value can make stored TableSummary // inconsistent, so when changing this you need to also rewrite all // TableSummary snapshots. let value: ConvexValue = ResolvedDocumentId::MIN.into(); assert_eq!(value.size(), 33); Ok(()) } #[test] fn test_object_cmp() -> anyhow::Result<()> { // Equal ignoring order. let o1: ConvexObject = assert_obj!( "chambers" => 36, "cuban_linx" => 4, ); let o2: ConvexObject = assert_obj!( "cuban_linx" => 4, "chambers" => 36, ); assert!(*o1 == *o2); // Lexicographic ordering on fields. let o1: ConvexObject = assert_obj!( "nested" => { "compton" => 187 }, ); let o2: ConvexObject = assert_obj!( "nested" => { "bompton" => 187 }, ); assert!(*o2 < *o1); // Ordered on values if same fields. let o1: ConvexObject = assert_obj!("_93_til" => 94); let o2: ConvexObject = assert_obj!("_93_til" => 95); assert!(*o1 < *o2); Ok(()) } #[test] fn test_shallow_merge() -> anyhow::Result<()> { // Overwrite objects with non-objects let mut old: ConvexObject = assert_obj!( "name" => { "first" => "Mr", "last" => { "a" => "Fanta", "b" => "stik", }, }, ); let new = assert_obj!( "name" => { "first" => "Mr", "last" => "Fantastik", }, ); let expected = assert_obj!( "name" => { "first" => "Mr", "last" => "Fantastik", }, ); old = old.shallow_merge(new)?; assert!(*old == *expected); // Overwrite non-objects with objects let mut old: ConvexObject = assert_obj!( "name" => "Mr", ); let new = assert_obj!( "name" => { "first" => "Mr", "surname" => "Fantastik", }, ); let expected = assert_obj!( "name" => { "first" => "Mr", "surname" => "Fantastik", }, ); old = old.shallow_merge(new)?; assert!(*old == *expected); // Don't merge sub-fields let mut old: ConvexObject = assert_obj!( "name" => { "first" => "Mr", "last" => "Fantastik", }, ); let new = assert_obj!( "name" => { "first" => "Mr", "surname" => "Fantastik", }, ); let expected = assert_obj!( "name" => { "first" => "Mr", "surname" => "Fantastik", }, ); old = old.shallow_merge(new)?; assert!(*old == *expected); Ok(()) } #[test] fn test_object_keys() -> anyhow::Result<()> { let obj = assert_obj!( "name" => "me", ); assert_eq!( obj.keys().map(Deref::deref).collect::<Vec<_>>(), vec!["name"] ); let empty_string_key = assert_obj!( "" => "empty", ); assert_eq!( empty_string_key .keys() .map(Deref::deref) .collect::<Vec<_>>(), vec![""] ); let control_char_key: anyhow::Result<_> = try { obj!("\t" => "tab")? }; assert!(control_char_key .unwrap_err() .to_string() .contains("Field names can only contain non-control ASCII characters")); let dollar_sign_key: anyhow::Result<_> = try { obj!("$id" => "tab")? }; assert!(dollar_sign_key .unwrap_err() .to_string() .contains("Field name $id starts with '$', which is reserved")); Ok(()) } #[test] fn test_filter_system_fields() { assert_eq!( assert_obj!( "_id" => "j571sbvz5zj1ps44j9f433pf1n6s7egs", "_creationTime" => 1715895391903.0, "name" => "Nicolas", ) .filter_system_fields(), assert_obj!( "name" => "Nicolas", ) ) }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/get-convex/convex-backend'

If you have feedback or need assistance with the MCP directory API, please join our Discord server