code: def test_issue_407():
      red = ColorClip((800, 600), color=(255, 0, 0)).with_duration(5)
      red.fps = 30
  
      assert red.fps == 30
      assert red.w == 800
      assert red.h == 600
      assert red.size == (800, 600)
  
      # ColorClip has no fps attribute.
      green = ColorClip((640, 480), color=(0, 255, 0)).with_duration(2)
      blue = ColorClip((640, 480), color=(0, 0, 255)).with_duration(2)
  
      assert green.w == blue.w == 640
      assert green.h == blue.h == 480
      assert green.size == blue.size == (640, 480)
  
      with pytest.raises(AttributeError):
          green.fps
  
      with pytest.raises(AttributeError):
          blue.fps
  
      video = concatenate_videoclips([red, green, blue])
      assert video.fps == red.fps
  
imports: import os
  import pytest
  from moviepy.audio.io.AudioFileClip import AudioFileClip
  from moviepy.video.compositing.CompositeVideoClip import CompositeVideoClip
  from moviepy.video.compositing.concatenate import concatenate_videoclips
  from moviepy.video.compositing.transitions import crossfadein, crossfadeout
  from moviepy.video.fx.resize import resize
  from moviepy.video.io.VideoFileClip import VideoFileClip
  from moviepy.video.VideoClip import ColorClip, ImageClip, VideoClip
label_desc: Use image node_id 8 for calling a global function with example usage: test_issue_407() without return types