microsoftgraph / msgraph-sample-rubyrailsapp

This sample demonstrates how to use the Microsoft Graph REST API to access data in Office 365 from Ruby on Rails apps.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

getting UnableToDeserializePostBody

wdiechmann opened this issue · comments

General information / context

Logging in works and so does viewing calendar events (index action)

Describe the bug

When trying to POST an event I get the error mentioned in the issue subject

the request is

endpoint = "/v1.0/me/events"
headervals = {:Authorization=>
  "Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6ImtLTjdCU09VWjNGbGMtbERoSzFUU2x1WENkTTRrcFpDTTEyaXFadWpZOTAiLCJhbGciOiJSUzI1NiIsIng1dCI6IjJaUXBKM1VwYmpBWVhZR2FYRUpsOGxWMFRPSSIsImtpZCI6IjJaUXBKM1VwYmpBWVhZR2FYRUpsOGxWMFRPSSJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9kNGM3MDVkMy1kMTFkLTQzNzMtYWQ3OS0wZTE4YTBmYTg3MjUvIiwiaWF0IjoxNjY2MDAzMjM1LCJuYmYiOjE2NjYwMDMyMzUsImV4cCI6MTY2NjAwNzQ5MSwiYWNjdCI6MCwiYWNyIjoiMSIsImFpbyI6IkFWUUFxLzhUQUFBQW9La28yTDhEdk0zMlhoTGxXOThjR0J2TFZ5Ryt3em5YSnlvY0FHT2V3K2ZCeUhQSXhyWVB0eGhGKzg3VU1TelZRUUQ4VTlQeG5mM2RmL2RRcnRmRXN3RDJYS0xjYkRTOFJ4alBudS9qNHM0PSIsImFtciI6WyJwd2QiLCJtZmEiXSwiYXBwX2Rpc3BsYXluYW1lIjoiVGVzdGluZyBSdWJ5IEludGVncmF0aW9uIiwiYXBwaWQiOiI1MTRmOTc0OS0xMzAzLTRiMWQtOWRlNy1lYjhiZTBhNGY2NDQiLCJhcHBpZGFjciI6IjEiLCJmYW1pbHlfbmFtZSI6IkRpZWNobWFubiIsImdpdmVuX25hbWUiOiJXYWx0aGVyIiwiaWR0eXAiOiJ1c2VyIiwiaXBhZGRyIjoiMTU4LjI0OC4xNjYuODIiLCJuYW1lIjoiV2FsdGhlciBEaWVjaG1hbm4iLCJvaWQiOiJkYzM5NTgxZi1jMWIwLTQxMTEtODM4OC04NTE2ODhjOTUyOWMiLCJwbGF0ZiI6IjUiLCJwdWlkIjoiMTAwMzAwMDA4QTA3MTFFQiIsInJoIjoiMC5BUXdBMHdYSDFCM1JjME90ZVE0WW9QcUhKUU1BQUFBQUFBQUF3QUFBQUFBQUFBQU1BQzAuIiwic2NwIjoiQ2FsZW5kYXJzLlJlYWRXcml0ZSBlbWFpbCBNYWlsYm94U2V0dGluZ3MuUmVhZCBvcGVuaWQgcHJvZmlsZSBVc2VyLlJlYWQiLCJzaWduaW5fc3RhdGUiOlsia21zaSJdLCJzdWIiOiIzYkFhU1BjTzNIM2dkZV80cnZzZjJzdkVfREVIMEl4MjVzdTIyb1VrSkhZIiwidGVuYW50X3JlZ2lvbl9zY29wZSI6IkVVIiwidGlkIjoiZDRjNzA1ZDMtZDExZC00MzczLWFkNzktMGUxOGEwZmE4NzI1IiwidW5pcXVlX25hbWUiOiJ3YWx0QGFsY28uZGsiLCJ1cG4iOiJ3YWx0QGFsY28uZGsiLCJ1dGkiOiI5QjJQNlFvd1EwaXBhVzhQS1kxRUFBIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiLCJiNzlmYmY0ZC0zZWY5LTQ2ODktODE0My03NmIxOTRlODU1MDkiXSwieG1zX3N0Ijp7InN1YiI6ImYwSEIzWjM1UUhUcWFObDRtd2ppbEVPNEhJNVlGa2VqSWU2a0xveXJ5MVkifSwieG1zX3RjZHQiOjE0MDA4MzQxNjMsInhtc190ZGJyIjoiRVUifQ.ioSBBJqgMr_Hp1r0b9XzzRSPAmSqT0aHYqQ8UCDkBJ1gbOtoag24a6ILzGlcIVGpH32UvVhW-UnqNi6mpeQesAns11kmvFPj828YVlopTFpS8qcAznVhY_Cb4YySGtjJ4nn9l0svs20XLCqobnQi8DSS8YDjvtacWO5UYwXe33crXV6gb0gc7LfOQv5XJoSEn6gFpKiIkWJ8OKwMlmJHVwMCDvz8zLxA44Qw5wmIgllXRcyZSzRg2c5wgt0gplSJt3U8CGxrPAJAbxPmsM4v-MowWZrazX9Hd3pK45NA3ezRpCLfSsb-UOH9F6mmCQ-EOm4PsUTDbtxCQzTn0C1Qbg",
 :Accept=>"application/json"}
params = {}
body = "{\"subject\":\"test fra Ruby uden attendees\",\"start\":{\"dateTime\":\"2022-10-17T15:00\",\"timeZone\":\"Romance Standard Time\"},\"end\":{\"dateTime\":\"2022-10-17T16:00\",\"timeZone\":\"Romance Standard Time\"},\"body\":{\"contentType\":\"text\",\"content\":\"is this the problem\"}}"

 HTTParty.post "#{GRAPH_HOST}#{endpoint}",
             headers: headervals,
             query: params,
             body: payload ? payload.to_json : nil

the response is

{"error"=>{"code"=>"UnableToDeserializePostBody", "message"=>"were unable to deserialize "}}

To Reproduce

Steps to reproduce the behavior:

  1. git clone
  2. follow the instructions verbatim
  3. create an event
  4. See error

Expected behavior

A response.code == 201

Screenshots

Desktop

  • OS: macOS 12.3.1 (MBA M1)
  • Browser: Chrome
  • Version: 106.0.5249.119

Dependency versions

GEM
  remote: https://rubygems.org/
  specs:
    actioncable (7.0.4)
      actionpack (= 7.0.4)
      activesupport (= 7.0.4)
      nio4r (~> 2.0)
      websocket-driver (>= 0.6.1)
    actionmailbox (7.0.4)
      actionpack (= 7.0.4)
      activejob (= 7.0.4)
      activerecord (= 7.0.4)
      activestorage (= 7.0.4)
      activesupport (= 7.0.4)
      mail (>= 2.7.1)
      net-imap
      net-pop
      net-smtp
    actionmailer (7.0.4)
      actionpack (= 7.0.4)
      actionview (= 7.0.4)
      activejob (= 7.0.4)
      activesupport (= 7.0.4)
      mail (~> 2.5, >= 2.5.4)
      net-imap
      net-pop
      net-smtp
      rails-dom-testing (~> 2.0)
    actionpack (7.0.4)
      actionview (= 7.0.4)
      activesupport (= 7.0.4)
      rack (~> 2.0, >= 2.2.0)
      rack-test (>= 0.6.3)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.2.0)
    actiontext (7.0.4)
      actionpack (= 7.0.4)
      activerecord (= 7.0.4)
      activestorage (= 7.0.4)
      activesupport (= 7.0.4)
      globalid (>= 0.6.0)
      nokogiri (>= 1.8.5)
    actionview (7.0.4)
      activesupport (= 7.0.4)
      builder (~> 3.1)
      erubi (~> 1.4)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.1, >= 1.2.0)
    activejob (7.0.4)
      activesupport (= 7.0.4)
      globalid (>= 0.3.6)
    activemodel (7.0.4)
      activesupport (= 7.0.4)
    activerecord (7.0.4)
      activemodel (= 7.0.4)
      activesupport (= 7.0.4)
    activerecord-session_store (2.0.0)
      actionpack (>= 5.2.4.1)
      activerecord (>= 5.2.4.1)
      multi_json (~> 1.11, >= 1.11.2)
      rack (>= 2.0.8, < 3)
      railties (>= 5.2.4.1)
    activestorage (7.0.4)
      actionpack (= 7.0.4)
      activejob (= 7.0.4)
      activerecord (= 7.0.4)
      activesupport (= 7.0.4)
      marcel (~> 1.0)
      mini_mime (>= 1.1.0)
    activesupport (7.0.4)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 1.6, < 2)
      minitest (>= 5.1)
      tzinfo (~> 2.0)
    addressable (2.8.1)
      public_suffix (>= 2.0.2, < 6.0)
    bindex (0.8.1)
    bootsnap (1.13.0)
      msgpack (~> 1.2)
    builder (3.2.4)
    capybara (3.37.1)
      addressable
      matrix
      mini_mime (>= 0.1.3)
      nokogiri (~> 1.8)
      rack (>= 1.6.0)
      rack-test (>= 0.6.3)
      regexp_parser (>= 1.5, < 3.0)
      xpath (~> 3.2)
    childprocess (4.1.0)
    concurrent-ruby (1.1.10)
    crass (1.0.6)
    debug (1.6.2)
      irb (>= 1.3.6)
      reline (>= 0.3.1)
    erubi (1.11.0)
    faraday (2.6.0)
      faraday-net_http (>= 2.0, < 3.1)
      ruby2_keywords (>= 0.0.4)
    faraday-net_http (3.0.1)
    globalid (1.0.0)
      activesupport (>= 5.0)
    hashie (5.0.0)
    httparty (0.20.0)
      mime-types (~> 3.0)
      multi_xml (>= 0.5.2)
    i18n (1.12.0)
      concurrent-ruby (~> 1.0)
    importmap-rails (1.1.5)
      actionpack (>= 6.0.0)
      railties (>= 6.0.0)
    io-console (0.5.11)
    irb (1.4.2)
      reline (>= 0.3.0)
    jbuilder (2.11.5)
      actionview (>= 5.0.0)
      activesupport (>= 5.0.0)
    jwt (2.5.0)
    loofah (2.19.0)
      crass (~> 1.0.2)
      nokogiri (>= 1.5.9)
    mail (2.7.1)
      mini_mime (>= 0.1.1)
    marcel (1.0.2)
    matrix (0.4.2)
    method_source (1.0.0)
    mime-types (3.4.1)
      mime-types-data (~> 3.2015)
    mime-types-data (3.2022.0105)
    mini_mime (1.1.2)
    minitest (5.16.3)
    msgpack (1.6.0)
    multi_json (1.15.0)
    multi_xml (0.6.0)
    net-imap (0.3.1)
      net-protocol
    net-pop (0.1.2)
      net-protocol
    net-protocol (0.1.3)
      timeout
    net-smtp (0.3.2)
      net-protocol
    nio4r (2.5.8)
    nokogiri (1.13.8-arm64-darwin)
      racc (~> 1.4)
    oauth2 (2.0.9)
      faraday (>= 0.17.3, < 3.0)
      jwt (>= 1.0, < 3.0)
      multi_xml (~> 0.5)
      rack (>= 1.2, < 4)
      snaky_hash (~> 2.0)
      version_gem (~> 1.1)
    omniauth (2.1.0)
      hashie (>= 3.4.6)
      rack (>= 2.2.3)
      rack-protection
    omniauth-oauth2 (1.8.0)
      oauth2 (>= 1.4, < 3)
      omniauth (~> 2.0)
    omniauth-rails_csrf_protection (1.0.1)
      actionpack (>= 4.2)
      omniauth (~> 2.0)
    public_suffix (5.0.0)
    puma (5.6.5)
      nio4r (~> 2.0)
    racc (1.6.0)
    rack (2.2.4)
    rack-protection (3.0.2)
      rack
    rack-test (2.0.2)
      rack (>= 1.3)
    rails (7.0.4)
      actioncable (= 7.0.4)
      actionmailbox (= 7.0.4)
      actionmailer (= 7.0.4)
      actionpack (= 7.0.4)
      actiontext (= 7.0.4)
      actionview (= 7.0.4)
      activejob (= 7.0.4)
      activemodel (= 7.0.4)
      activerecord (= 7.0.4)
      activestorage (= 7.0.4)
      activesupport (= 7.0.4)
      bundler (>= 1.15.0)
      railties (= 7.0.4)
    rails-dom-testing (2.0.3)
      activesupport (>= 4.2.0)
      nokogiri (>= 1.6)
    rails-html-sanitizer (1.4.3)
      loofah (~> 2.3)
    railties (7.0.4)
      actionpack (= 7.0.4)
      activesupport (= 7.0.4)
      method_source
      rake (>= 12.2)
      thor (~> 1.0)
      zeitwerk (~> 2.5)
    rake (13.0.6)
    regexp_parser (2.6.0)
    reline (0.3.1)
      io-console (~> 0.5)
    rexml (3.2.5)
    ruby2_keywords (0.0.5)
    rubyzip (2.3.2)
    selenium-webdriver (4.5.0)
      childprocess (>= 0.5, < 5.0)
      rexml (~> 3.2, >= 3.2.5)
      rubyzip (>= 1.2.2, < 3.0)
      websocket (~> 1.0)
    snaky_hash (2.0.1)
      hashie
      version_gem (~> 1.1, >= 1.1.1)
    sprockets (4.1.1)
      concurrent-ruby (~> 1.0)
      rack (> 1, < 3)
    sprockets-rails (3.4.2)
      actionpack (>= 5.2)
      activesupport (>= 5.2)
      sprockets (>= 3.0.0)
    sqlite3 (1.5.3-arm64-darwin)
    stimulus-rails (1.1.0)
      railties (>= 6.0.0)
    thor (1.2.1)
    timeout (0.3.0)
    turbo-rails (1.3.1)
      actionpack (>= 6.0.0)
      activejob (>= 6.0.0)
      railties (>= 6.0.0)
    tzinfo (2.0.5)
      concurrent-ruby (~> 1.0)
    version_gem (1.1.1)
    web-console (4.2.0)
      actionview (>= 6.0.0)
      activemodel (>= 6.0.0)
      bindex (>= 0.4.0)
      railties (>= 6.0.0)
    webdrivers (5.2.0)
      nokogiri (~> 1.6)
      rubyzip (>= 1.3.0)
      selenium-webdriver (~> 4.0)
    websocket (1.2.9)
    websocket-driver (0.7.5)
      websocket-extensions (>= 0.1.0)
    websocket-extensions (0.1.5)
    xpath (3.2.0)
      nokogiri (~> 1.8)
    zeitwerk (2.6.1) 


PLATFORMS
  arm64-darwin-21

DEPENDENCIES
  activerecord-session_store (~> 2.0.0)
  bootsnap
  capybara
  debug
  httparty (~> 0.20.0)
  importmap-rails
  jbuilder
  omniauth-oauth2 (~> 1.8.0)
  omniauth-rails_csrf_protection (~> 1.0.1)
  puma (~> 5.0)
  rails (~> 7.0.4)
  selenium-webdriver
  sprockets-rails
  sqlite3 (~> 1.5)
  stimulus-rails
  turbo-rails
  tzinfo-data
  web-console
  webdrivers

RUBY VERSION
   ruby 3.1.2p20

BUNDLED WITH
   2.3.22 

Finally I desided to test what @nikithauc said is working in this issue: microsoftgraph/msgraph-sdk-javascript#404 (comment) - regrettably with no luck either

so - if I change the make_api_call to look like this

  def make_api_call(method, endpoint, token, headervals = nil, params = nil, payload = nil)
    headervals ||= {}
    headervals[:Authorization] = "Bearer #{token}"
    headervals[:Accept] = 'application/json'
    
    params ||= {}
    
    case method.upcase
    when 'GET'
      HTTParty.get "#{GRAPH_HOST}#{endpoint}",
      headers: headervals,
      query: params
    when 'POST'
      headervals['Prefer'] = 'outlook.timezone="UTC"'
      headervals['Content-Type'] = 'application/json'
      HTTParty.post "#{GRAPH_HOST}#{endpoint}",
                    headers: headervals,
                    query: params,
                    body: payload ? payload.to_json : nil
    else
      raise "HTTP method #{method.upcase} not implemented"
    end
  end

we're good

not sure why this was closed. I sent a pull request to set the header correctly since I ran into the same issue today.

I closed it - with a comment detaliing the issue - but without the 'guts' to suggest a PR 🥲

Thanks to you both! I had renamed the parameter but missed updating it on that line :(.